比赛 |
防止浮躁的小练习V0.1 |
评测结果 |
AAAAAAAAAA |
题目名称 |
通信线路 |
最终得分 |
100 |
用户昵称 |
NVIDIA |
运行时间 |
1.289 s |
代码语言 |
C++ |
内存使用 |
0.47 MiB |
提交时间 |
2016-10-07 18:35:13 |
显示代码纯文本
#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
#include<iomanip>
#include<cctype>
#include<algorithm>
#define INF 10086110
using namespace std;
int f[10010],sum=0,n,m,k,i,j,num=0;
struct EDg
{
int u;
int v;
int w;
}e[10010];
int getf(int v)
{
if(f[v]==v)return v;
else return f[v]=getf(f[v]);
}
bool cmp(EDg a,EDg b)
{
if(a.w<b.w)return 1;
else return 0;
}
int beg()
{
for(i=1;i<=n;i++)
f[i]=i;
}
int main()
{
freopen("mcst.in","r",stdin);
freopen("mcst.out","w",stdout);
cin>>n;
beg();
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
int x;
cin>>x;
if(j>=i)
continue;
else {
if(x==-1)continue;
e[++num].v=i;
e[num].u=j;
e[num].w=x;
}
}
sort(e+1,e+num+1,cmp);
int fx,fy;
for(int i=1;i<=num;i++)
{
fx=getf(e[i].v);
fy=getf(e[i].u);
if(fx!=fy)
{
f[fx]=fy;
sum+=e[i].w;
}
}
cout<<sum;
return 0;
}