@[EKKO2年专注玩家](/space/show?uid=121533)
帮你改过了。
```cpp
#include<bits/stdc++.h>
using std::cin;
using std::cout;
using std::endl;
struct Edge{
int from,to,w,num;
Edge() {}
Edge(int _f,int _t,int _w,int _n):from(_f),to(_t),w(_w),num(_n){}
}e[250001];
int a,b,num2=0,family[501],ans=0,x;
bool cmp(Edge x,Edge y)
{
if(x.w>=y.w) return false;
else return true;
}
int find(int x)
{
if(family[x]!=x) family[x]=find(family[x]);
return family[x];
}
void unionset(int x,int y)
{
x=find(x);
y=find(y);
if(x==y) return;
else family[x]=y;
}
int main()
{
cin>>a>>b;
for(int i=1;i<=b;i++) family[i]=i;
for(int i=1;i<=b;i++)
{
num2++;
e[num2]=Edge(0,i,a,num2);
}
ans=0;
for(int i=1;i<=b;i++)
for(int j=1;j<=b;j++)
{
cin>>x;
if(i!=j)
{
if(x==0) x=a;
num2++;
e[num2]=Edge(i,j,x,num2);
}
}
std::sort(e+1,e+num2+1,cmp);
for(int i=1;i<=num2;i++)
{
if(find(e[i].from)!=find(e[i].to))
{
unionset(e[i].from,e[i].to);
ans+=e[i].w;
}
}
cout<<ans;
return 0;
}
```
by Smile_Cindy @ 2019-05-18 17:14:45
@[Alpha](/space/show?uid=87058)
谢谢大佬
太神奇了
by EkkoXy @ 2019-05-20 13:41:02