首页 > 代码库 > [洛谷3366]【模板】最小生成树
[洛谷3366]【模板】最小生成树
思路:Kruskal
1 #include<cstdio> 2 #include<utility> 3 #include<algorithm> 4 #define w first 5 #define a second.first 6 #define b second.second 7 const int N=5001; 8 typedef std::pair<int,std::pair<int,int> > Edge; 9 class UnionFindSet {10 private:11 int anc[N];12 public:13 UnionFindSet(int n) {14 for(int i=1;i<=n;i++) anc[i]=i;15 }16 int Find(int x) {17 return (x==anc[x])?x:(anc[x]=Find(anc[x]));18 }19 void Union(int x,int y) {20 anc[Find(y)]=Find(x);21 }22 };23 int main() {24 int n,m;25 scanf("%d%d",&n,&m);26 Edge e[m];27 for(int i=0;i<m;i++) scanf("%d%d%d",&e[i].a,&e[i].b,&e[i].w);28 std::sort(&e[0],&e[m]);29 UnionFindSet s(n);30 int ans=0,area=n;31 for(int i=0;i<m;i++) {32 if(s.Find(e[i].a)==s.Find(e[i].b)) continue;33 ans+=e[i].w;34 s.Union(e[i].a,e[i].b);35 area--;36 if(area==1) {37 printf("%d\n",ans);38 return 0;39 }40 }41 puts("orz");42 return 0;43 }
[洛谷3366]【模板】最小生成树
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。