#include<bits/stdc++.h>
using namespace std;
struct line
{
int from,to,w;
line(const int &from,const int &to,const int &w):
from(from),
to(to),
w(w)
{
}
};
int n;
vector<line> lines;
int f[301];
inline void init()
{
for(int i=0;i<=300;i++)
f[i]=i;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int w;
scanf("%d",&w);
lines.push_back(line(0,i,w));
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
int w;
scanf("%d",&w);
lines.push_back(line(i,j,w));
}
}
int findFather(const int &a)
{
if(f[a]==a)
return a;
else
{
f[a]=findFather(f[a]);
return f[a];
}
}
inline void merge(const int &a,const int &b)
{
f[findFather(b)]=findFather(a);
}
inline bool cmp(const line &a,const line &b)
{
return a.w<=b.w;
}
inline int kruskal()
{
sort(lines.begin(),lines.end(),cmp);
int sum=0;
for(vector<line>::const_iterator i=lines.begin();i!=lines.end();i++)
if(findFather(i->from)!=findFather(i->to))
{
merge(i->from,i->to);
sum+=i->w;
}
return sum;
}
int main()
{
init();
printf("%d\n",kruskal());
return 0;
}
以上代码,提交后会迷之RE*9,调试后发现在cmp
函数内RE,将sort
替换为stable_sort
可避免该问题