哪错了啊?错哪了啊?哪啊错了?

P3366 【模板】最小生成树

@[GODTREE](/user/776799) `get_f` 函数中 `if (f[u]==0)`-->`if (f[u]==u)`
by yuanxiuan @ 2023-07-05 16:47:38


@[yuanxiuan](/user/614716) 谢谢大佬
by GODTREE @ 2023-07-05 16:52:28


还是无法AC
by GODTREE @ 2023-07-05 16:59:39


改成这样就对了,看一下,有注释的地方改过 你这个数组开小了,而且并查集写的不对 ```cpp #include <bits/stdc++.h> using namespace std; int n,m,f[5005]; int sum=0,num=0; struct edge { int nxt,to,val; }e[200005];//数组开小了,这里是边的数量 bool cmp(edge a,edge b) { return a.val<b.val; } int get_f(int u) { if (f[u]==u)//看一下 { return u; } return f[u]=get_f(f[u]);//返回时修改 } void kru() { for (int i=1;i<=n;i++) { f[i]=i; } sort(e+1,e+m+1,cmp); for (int i=1;i<=m;i++) { int f1=get_f(e[i].nxt); int f2=get_f(e[i].to);//这两个应该是这样 if (f1!=f2)// { num++; sum+=e[i].val; f[f1]=f2;// } if (num==n-1) { break; } } } int main() { cin>>n>>m; for(int i=1;i<=m;i++) { cin>>e[i].nxt>>e[i].to>>e[i].val; } kru(); if(num<n-1) { cout<<"orz"; } else { cout<<sum; } return 0; } ```
by pj114514 @ 2023-07-06 16:15:19


|