本题的思路有很多,这里只介绍一种:
最大生成树(Kruskal)
算法思路:
就是Kruskal的常规思路:
先是排序,再是用并查集连边,最后输出最大边权。
sort(e+1,e+1+m,cmp);for(int i=1;i<=m;++i){ f=find(e[i].f); t=find(e[i].t); if(f!=t) { b[f]=t; ++cnt; w=find(1); if(t==w) { for(int j=2;j<=n;++j) { if(ok[j]==false&&find(j)==w) { ans[j]=e[i].w; ok[j]=true; } } if(cnt==n-1) { break; } } }}