最小生成树Kruscal

// Luogu P3366 【模板】最小生成树

include <bits/stdc++.h>

using namespace std;
const int N=200006;
int n, m;
struct edge{
int u,v,w;
bool operator<(const edge &t)const
{return w < t.w;}
}e[N];
int fa[N],ans,cnt;

int find(int x){
if(fa[x]x) return x;
return fa[x]=find(fa[x]);
}
bool kruskal(){
sort(e,e+m);
for(int i=1;i<=n;i++)fa[i]=i;
for(int i=0; i<m; i++){
int x=find(e[i].u);
int y=find(e[i].v);
if(x!=y){
fa[x]=y;
ans+=e[i].w;
cnt++;
}
}
return cnt
n-1;
}
int main(){
cin>>n>>m;
for(int i=0; i<m; i++)
cin>>e[i].u>>e[i].v>>e[i].w;
if(!kruskal()) puts("orz");
else printf("%d\n",ans);
return 0;
}

posted @ 2025-02-05 19:53  伍跳跳  阅读(10)  评论(0)    收藏  举报