模板题贴代码
#include<bits/stdc++.h>
using namespace std;
const int maxn = 50005;
struct edge{
int u;
int v;
int w;
}e[maxn];
int f[maxn];
int n,m;
bool cmp(edge a ,edge b){
return a.w < b.w;
}
void init(){
for(int i = 0; i <= n; i ++)
f[i] = i;
}
int find (int x){
printf("!!");
if(x == f[x]) return x;
else return f[x] = find(f[x]);
}
int Union(int a,int b){
int fa = find(a);
int fb = find(b);
if(fa > fb)
f[a] = b;
else
f[b] = a;
}
int kru(int nn){
int res = 0 ;
for(int i = 0 ; i < m ; i ++){
if(find(e[i].u) != find(e[i].v)){
Union(e[i].u,e[i].v);
res+=e[i].w;
nn--;
if(nn == 1)
return res ;
}
}
}
int main(){
cin >> n >> m;
for(int i = 0 ; i < m ; i ++){
cin >> e[i].u >> e[i].v >> e[i].w;
}
sort(e,e+m,cmp);
init();
int ans = kru(n);
cout << ans;
}
本文介绍了一种实现Kruskal最小生成树算法的方法,包括使用结构体存储边的信息、初始化并查集、查找根节点、进行边的合并等步骤,并通过一个完整的C++程序示例展示了算法的具体实现。
51nod 1212(最小生成树)&spm=1001.2101.3001.5002&articleId=79031814&d=1&t=3&u=21ff6adaac8842bfbee3b00100c1d284)
376

被折叠的 条评论
为什么被折叠?



