859. Kruskal算法求最小生成树 - AcWing题库
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+9;//注意数据范围
int p[N],n,m;
int ans=0,sum=0;
struct node{
int u,v,w;
}a[N];
bool cmp(node a,node b){
return a.w<b.w;
}
int find(int x){
if(p[x]==x) return x;
return p[x]=find(p[x]);
}
int kru(){
for(int i=0;i<N;i++) p[i]=i;//i=N会越界
for(int i=0;i<m;i++){
int x=find(a[i].u);
int y=find(a[i].v);
// cout<<x<<' '<<y<<'\n';
if(x==y) continue;
ans+=a[i].w;
p[x]=y;
sum++;
}
return ans;
cout<<n<<'\n';
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n>>m;
// cout<<n<<' '<<m<<'\n';
for(int i=0;i<m;i++) cin>>a[i].u>>a[i].v>>a[i].w;
sort(a,a+m,cmp);
// int ans=kru();
// cout<<n<<'\n';
kru();
// cout<<sum<<'\n';
// cout<<n<<'\n';
if(sum==n-1) cout<<ans;
else cout<<"impossible"<<'\n';
return 0;
}