Kruskal

mac2025-05-30  2

Kruskal模板

#include<bits/stdc++.h> using namespace std; struct Edge { int x,y,len; } edge[500010]; int fa[100010],n,m,ans=0; bool operator <(Edge a,Edge b) { return a.len<b.len; } int find(int x) { return x==fa[x]?x:fa[x]=find(fa[x]); } int main() { cin>>n>>m; for(int i=1; i<=m; i++) cin>>edge[i].x>>edge[i].y>>edge[i].len; //按照边权排序 sort(edge+1,edge+m+1); //初始化并查集 for(int i=1; i<=n; i++) fa[i]=i; //求最小生成树 for(int i=1; i<=m; i++) { int x=find(edge[i].x); int y=find(edge[i].y); if(x==y) continue; fa[x]=y; ans+=edge[i].len; } cout<<ans<<endl; return 0; }
最新回复(0)