裸的kruskal

P2330 [SCOI2005] 繁忙的都市

#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<queue> using namespace std; const int A = 50001; struct city{int u,v,w;}a[A];//结构体city int father[A]; int n,m,fx,s,fy; int best =0,k=0; int find(int x){return father[x] = father[x]==x?x:find(father[x]);}//找爹函数(并查集) int cmp(city&a,city&b){return a.w <b.w;} int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=m;i++){ scanf("%d%d%d",&a[i].u,&a[i].v,&a[i].w); } for(int i=1;i<=n;i++)father[i] = i;//初始每个道路都不相通 sort(a+1,a+m+1,cmp);//江道路按分值排序,保证改造的道路中分值最大的最小 for(int i=1;i<=m;i++){ fx=find(a[i].u); fy=find(a[i].v); if(fx!=fy){//连边 father[fy]=fx; k++; best = a[i].w;//由于已排序,所以不需比较 } if(k==n-1)break;//终结条件为n个交叉路口都相通,n个点遍历n-1条边(不严谨) s=n-1; } cout<<s<<' '<<best;//注意空格 return 0; }
by 最喜欢saber了 @ 2018-04-27 20:22:34


|