#include<bits/stdc++.h>
using namespace std;
#define cl(a,b) memset(a,b,sizeof(a))
#define LL long long
#define pb push_back
#define gcd __gcd
#define For(i,j,k) for(int i=(j);i<k;i++)
#define lowbit(i) (i&(-i))
#define _(x) printf("%d\n",x)
const int maxn = 1e6+10;
const int inf = 1 << 28;
int f[maxn];
void init(int n){
for(int i=0;i<=n;i++){
f[i]=i;
}
}
int find(int x){
if(f[x]==x)return x;
return f[x]=find(f[x]);
}
void merge(int x,int y){
x=find(x);
y=find(y);
if(x==y)return ;
f[x]=y;
}
bool same(int x,int y){
return find(x)==find(y);
}
struct node{
int x,y,w;
bool operator<(const node&tmp) const{
return w<tmp.w;
}
}p[maxn];
int main(){
int n,m;
cin>>n>>m;
int ans = 0;
init(n);
for(int i=0;i<m;i++){
int x,y,w;cin>>x>>y>>w;
p[i]=(node){x,y,w};
}
sort(p,p+m);
for(int i=0;i<m;i++){
if(same(p[i].x,p[i].y))continue;
merge(p[i].x,p[i].y);
ans+=p[i].w;
}
cout<<ans<<endl;
return 0;
}
HIHO #1098 : 最小生成树二·Kruscal算法
最新推荐文章于 2021-02-19 18:53:40 发布