求助!P1340兽径管理

学术版

``` #include <bits/stdc++.h> using namespace std; #define maxn 210 #define maxw 6010 int f[maxn],n,cw,head[maxw]; struct node { int u,v,w,tm; }e[maxw]; inline void init_() { freopen("shouj.txt","r",stdin); } inline int read_() { int x=0,f=1; char c=getchar(); while(c<'0'||c>'9') { if(c=='-') f=-1; c=getchar(); } while(c>='0'&&c<='9') { x=x*10+c-'0'; c=getchar(); } return x*f; } inline void readda_() { n=read_();cw=read_(); int x,y,z; for(int i=1;i<=cw;i++) { x=read_();y=read_();z=read_(); e[i].u=x,e[i].v=y,e[i].w=z,e[i].tm=i; } } inline bool cmp_(node ab,node ac) { return ab.w<ac.w; } inline void clean_() { for(int i=0;i<=n;i++) f[i]=i; } inline int find_(int x) { if(f[x]==x) return x; else return f[x]=find_(f[x]); } inline void merge_(int x,int y) { int rx=find_(x); int ry=find_(y); f[rx]=ry; } inline int ksull_(int ttm) { clean_(); int ans=0,size=0; for(int i=1;i<=cw;i++) { if(e[i].tm>ttm) continue; if(size==(n-1)) return ans; int u=e[i].u,v=e[i].v; if(f[u]!=f[v]) { ans+=e[i].w; merge_(u,v); ++size; } } if(size<(n-1)) return -1; if(size==(n-1)) return ans; } inline void work_() { sort(e+1,e+cw+1,cmp_); for(int i=1;i<=cw;i++) printf("%d\n",ksull_(i)); } int main() { init_(); readda_(); work_(); return 0; } ```
by 小元勋 @ 2019-03-21 17:31:46


%%%%%%
by 绵中大佬 @ 2019-03-21 17:35:12


不会
by Sky_Art @ 2019-03-21 17:39:02


请发到题目讨论版(对应题目的题目讨论版)
by dblark @ 2019-03-21 17:39:18


去掉文件
by Sai0511 @ 2019-03-21 17:51:03


```cpp #include <bits/stdc++.h> using namespace std; #define maxn 210 #define maxw 6010 int f[maxn],n,cw,head[maxw]; struct node { int u,v,w,tm; }e[maxw]; inline void init_() { //freopen("shouj.txt","r",stdin);//把freopen去掉才行 } inline int read_() { int x=0,f=1; char c=getchar(); while(c<'0'||c>'9') { if(c=='-') f=-1; c=getchar(); } while(c>='0'&&c<='9') { x=x*10+c-'0'; c=getchar(); } return x*f; } inline void readda_() { n=read_();cw=read_(); int x,y,z; for(int i=1;i<=cw;i++) { x=read_();y=read_();z=read_(); e[i].u=x,e[i].v=y,e[i].w=z,e[i].tm=i; } } inline bool cmp_(node ab,node ac) { return ab.w<ac.w; } inline void clean_() { for(int i=0;i<=n;i++) f[i]=i; } inline int find_(int x) { if(f[x]==x) return x; else return f[x]=find_(f[x]); } inline void merge_(int x,int y) { int rx=find_(x); int ry=find_(y); f[rx]=ry; } inline int ksull_(int ttm) { clean_(); int ans=0,size=0; for(int i=1;i<=cw;i++) { if(e[i].tm>ttm) continue; if(size==(n-1)) return ans; int u=e[i].u,v=e[i].v; if(find_(f[u])!=find_(f[v])) {//要把f[u] f[v]find_之后再判断 ans+=e[i].w; merge_(u,v); ++size; } } if(size<(n-1)) return -1; if(size==(n-1)) return ans; } inline void work_() { sort(e+1,e+cw+1,cmp_); for(int i=1;i<=cw;i++) printf("%d\n",ksull_(i)); } int main() { init_(); readda_(); work_(); return 0; } ```
by AOTO @ 2019-03-21 18:20:37


@[何元勋](/space/show?uid=109427)
by AOTO @ 2019-03-21 18:20:51


|