Kruskal算法模板(并查集+快读
#include<bits/stdc++.h> using namespace std; const int maxm=4e5+10; const int maxn=2e5+10; struct node{ int u,v,w; bool operator < (const node & o) const{ return w<o.w; } } edge[maxm]; int fa[maxm],rk[maxm]; inline int read() { int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); } while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f; } void write(long long x) { if(x<0) putchar('-'),x=-x; if(x>9) write(x/10); putchar(x%10+'0'); return; } void Init(int n){ for(int i=1;i<=n;i++){ rk[i]=1; fa[i]=i; } } int find(int x){ if(fa[x]!=x){ fa[x]=find(fa[x]); } return fa[x]; } void unite(int x,int y){ x=find(x); y=find(y); if(x==y) return; if(rk[x]<rk[y]){ fa[x]=y; rk[y]+=rk[x]; }else{ fa[y]=x; rk[x]+=rk[y]; } } int Kruskal(int n,int m){ int nEdge=0,length=0; for(int i=1;i<=m && nEdge!=m-1;i++){ if(find(edge[i].u)==find(edge[i].v)){ continue; }else{ unite(edge[i].u,edge[i].v); length+=edge[i].w; nEdge++; } } if(nEdge<n-1) length=-1; return length; } int main(){ int n,m;n=read();m=read(); Init(n); for(int i=1;i<=m;i++){ edge[i].u=read(); edge[i].v=read(); edge[i].w=read(); } sort(edge+1,edge+m+1); write(Kruskal(n,m)); putchar('\n'); system("pause"); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】