P1111 修复公路(并查集)

zhouwc

2018-02-23 15:05:34

Solution

这道题我最大的失误是,排序的时候把m排成了n,导致WA。 这道题还是很有价值的,仔细去看看。 还有有一篇题解写的挺不错的 ```cpp #include<bits/stdc++.h> using namespace std; int num[1005],f[1005],n,m; struct zwc { int x,y,z; }l[100005]; bool cmp(struct zwc a,struct zwc b) { return a.z<b.z; } int findfa(int x) { if (f[x]!=x) f[x]=findfa(f[x]); return f[x]; } int main() { scanf("%d%d",&n,&m); for (int i=1;i<=m;i++) { scanf("%d%d%d",&l[i].x,&l[i].y,&l[i].z); } sort(l+1,l+m+1,cmp); for (int i=1;i<=n;i++) { f[i]=i; num[i]=1; } for (int i=1;i<=m;i++) { int a=findfa(l[i].x); int b=findfa(l[i].y); if (a!=b) { if(num[a]>num[b]) { f[b]=a; num[a]+=num[b]; } else { f[a]=b; num[b]+=num[a]; } } if (num[findfa(l[i].x)]>=n) { printf("%d",l[i].z); return 0; } } printf("-1"); return 0; } ```