keuskal 只能过一个,实在是自己找不出错误了

P3366 【模板】最小生成树

做了好长时间了,orz
by Lidaban @ 2020-05-17 10:59:28


~~keuskal珂海星~~
by ADay @ 2020-05-17 10:59:46


~~您这个 find 函数写的有点奇怪啊~~
by ez_lcw @ 2020-05-17 11:01:33


~~这难道不是 kruskal 吗~~
by Aw顿顿 @ 2020-05-17 11:01:33


~~Keuskal我都不会/kk~~
by Ryo_Yamada @ 2020-05-17 11:01:42


您改天还是用jvav写一下keuskal吧
by suxxsfe @ 2020-05-17 11:02:04


@[Lidaban](/user/275556) find都不路压的吗
by Ryo_Yamada @ 2020-05-17 11:02:14


~~lz都A了,散了散了~~
by Ryo_Yamada @ 2020-05-17 11:02:53


```cpp sort(Edge,Edge+e+1,cmp); ``` 改成 ```cpp sort(Edge+1,Edge+e+1,cmp); ```
by suxxsfe @ 2020-05-17 11:03:11


@[Lidaban](/user/275556) AC,改动处加了```/**/``` ```cpp #include <bits/stdc++.h> using namespace std; int f[5005]; struct node{ int s,cost,to; }; node Edge[200005]; bool cmp(node a,node b){ return a.cost<b.cost; } /*int F(int a){ int tf = f[a]; if(f[tf] == tf)return tf; f[a] = F(tf); return f[a]; } bool bc(int a,int b){ if(F(a) == F(b)) return 1; f[b] = a; return 0; }*/ int find(int x){ while(x != f[x]) x = f[x] = f[f[x]]; return x; } long long ans; int main() { int v,e,E; scanf("%d%d",&v,&e); for(int i = 1;i <= e; i++) scanf("%d%d%d",&Edge[i].s,&Edge[i].to,&Edge[i].cost); sort(Edge + 1,Edge+e+1,cmp); /**/ int N = 1; for(int i = 1; i <= v; i++) f[i] = i; for(int i = 1; i <= e; i++){ if(N == v){ printf("%lld\n",ans); break; } if(find(Edge[i].s)==find(Edge[i].to)) continue; f[find(Edge[i].s)] = find(Edge[i].to); /**/ N++; ans += Edge[i].cost; } //for(int i = 0 ;i < e;i++) printf("%d %d %d \n",Edge[i].s,Edge[i].to,Edge[i].cost); if(N != v) printf("orz"); return 0; } ```
by Lice @ 2020-05-17 11:04:31


| 下一页