AcWing 859. Kruskal算法求最小生成树
原题链接
简单
作者:
zqk
,
2025-04-03 11:01:54
· 河南
,
所有人可见
,
阅读 2
Kruskal
O(m∗logm)
C++ 代码
#include<iostream>
#include<algorithm>
#define N 100010
using namespace std;
int n,m;
struct work{
int a,b,w;
bool operator<(const work&t)const{
return w<t.w;
}
};
work graph[2*N];
int pre[N];
int find(int x){
if(pre[x]!=x)pre[x]=find(pre[x]);
return pre[x];
}
int cnt;
long long krusal(){
long long sum=0;
for(int i=0;i<m;++i){
int pa=find(graph[i].a);
int pb=find(graph[i].b);
if(pa!=pb){
cnt++;
pre[pa]=pb;
sum+=graph[i].w;
}
}
return sum;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;++i){
pre[i]=i;
}
for(int i=0;i<m;++i){
int a,b,w;
cin>>a>>b>>w;
graph[i].a=a;
graph[i].b=b;
graph[i].w=w;
}
sort(graph,graph+m);
int sum=krusal();
if(cnt<n-1)cout<<"impossible"<<endl;
else cout<<sum<<endl;
return 0;
}