做了好长时间了,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