【模板】MST(Kruskal)
阿新 • • 發佈:2018-11-26
程式碼如下
#include <bits/stdc++.h> using namespace std; const int maxv=2e5+10; const int maxe=5e5+10; inline int read(){ int x=0,f=1;char ch; do{ch=getchar();if(ch=='-')f=-1;}while(!isdigit(ch)); do{x=x*10+ch-'0';ch=getchar();}while(isdigit(ch)); return f*x; } struct node{int from,to,w;}e[maxe]; int n,m,sum,f[maxv]; long long ans; bool cmp(const node& x,const node& y){return x.w<y.w;} int find(int x){return x==f[x]?x:f[x]=find(f[x]);} void read_and_parse(){ n=read(),m=read(); for(int i=1;i<=n;i++)f[i]=i; for(int i=1;i<=m;i++)scanf("%d%d%d",&e[i].from,&e[i].to,&e[i].w); } void solve(){ sort(e+1,e+m+1,cmp); for(int i=1;i<=m;i++){ if(sum==n-1)break; int x=find(e[i].from),y=find(e[i].to); if(x^y)f[x]=y,ans+=e[i].w,++sum; } printf("%lld\n",ans); } int main(){ read_and_parse(); solve(); return 0; }