求助大佬,死活看不出哪里错了,用的Kruskal

P3366 【模板】最小生成树

@[xuan132](/user/582113) 并查集不是这么写的啊。 需要有 `getf` 函数: ```cpp int getf(int x) { return f[x] == x ? f[x] : f[x] = getf(f[x]); } ```
by zhiyangfan @ 2021-12-20 21:25:21


@[xuan132](/user/582113) 兄弟你的并查集呢
by Universal_xtr @ 2021-12-20 22:01:00


@[xuan132](/user/582113) 要有找祖宗的`fa`函数吧。。。 `int fa(int x){return f[x]==x?x:f[x]=fa(f[x]);}`
by Universal_xtr @ 2021-12-20 22:02:30


@[xuan132](/user/582113) ```cpp #include <iostream> #include <algorithm> #include <cstdio> using namespace std; struct bian { int head,tail,length; }; bool cmp(bian x,bian y) { return x.length<y.length; } int v[10000]; int fa(int x){return v[x]==x?x:v[x]=fa(v[x]);} long long sum=0,cnt=0; bian l[1000000]; int main() { int n,m;cin>>n>>m; for(int i=1;i<=m;i++) { cin>>l[i].head>>l[i].tail>>l[i].length; } sort(l+1,l+m,cmp); for(int i=1;i<=n;i++) { v[i]=i; } for(int i=1;i<=m;i++) { int v1=fa(l[i].head),v2=fa(l[i].tail); if(v1!=v2) { sum+=l[i].length; v[v1]=v[v2]; cnt++; if(cnt==n-1) { break; } } } if(cnt==n-1) { cout<<sum; } else { cout<<"orz"; } return 0; } ```
by Universal_xtr @ 2021-12-20 22:07:46


@[zhiyangfan](/user/137603) 谢谢大佬
by xuan132 @ 2021-12-20 22:59:06


@[Universal_xtr](/user/540148) 谢谢大佬,还帮忙改了,感激涕零
by xuan132 @ 2021-12-20 23:00:08


sort确定没有问题吗 我记得从1到m排序的话是 ``` sort(a+1,a+1+m,cmp); ``` 吧
by KS_tips_CN @ 2022-02-27 15:21:45


|