最小生成树-kruskal 模板

来源:互联网 发布:淘宝 最贵的包子 编辑:程序博客网 时间:2024/06/05 00:58
#include<iostream>#include<cstdio>#include<vector>#include<algorithm>#include<queue>#define ll long longusing namespace std;struct node{int s,t,len;friend bool operator < (node a,node b){return a.len<b.len;}}e[20020];int n,m;int ans=0;int fa[1010];int getroot(int x){if(fa[x]==x)return x;return fa[x]=getroot(fa[x]);}int main(){scanf("%d%d",&n,&m);for(int i=1; i<=n; i++)fa[i]=i;for(int i=0; i<m; i++){scanf("%d%d%d",&e[i].s,&e[i].t,&e[i].len);}sort(e,e+m);int sum=1;for(int i=0; i<m; i++){e[i].s=getroot(e[i].s);e[i].t=getroot(e[i].t);if(e[i].s==e[i].t)continue;ans+=e[i].len;sum++;if(sum==n)break;fa[e[i].s]=e[i].t;}if(sum==n)printf("%d\n",ans);else printf("-1\n");return 0;}

原创粉丝点击