比赛 |
防止浮躁的小练习V0.1 |
评测结果 |
AAAAAAAAAA |
题目名称 |
通信线路 |
最终得分 |
100 |
用户昵称 |
Hzoi_chairman |
运行时间 |
0.532 s |
代码语言 |
C++ |
内存使用 |
9.01 MiB |
提交时间 |
2016-10-07 16:41:09 |
显示代码纯文本
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
using namespace std;
int prim();
int n,g[1510][1510];
int main()
{
freopen("mcst.in","r",stdin);
freopen("mcst.out","w",stdout);
memset(g,127,sizeof(g));
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
int k;
scanf("%d",&k);
if(k==-1)continue;
g[i][j]=g[j][i]=k;
}
}
printf("%d",prim());
}
int prim()
{
int j,minn,mst=0,low[1510],set[1510],used[1510];
memset(low,127,sizeof(low));
for(int i=1;i<=n;i++)
{
low[i]=g[1][i];
used[i]=0;
set[i]=1;
}
used[1]=1;
for(int i=1;i<n;i++)
{
j=0;minn=0x7f7f7f7f;
for(int k=2;k<=n;k++)
{
if(!used[k]&&low[k]<minn)
{
minn=low[k];
j=k;
}
}
used[j]=1;
mst+=minn;
for(int i=2;i<=n;i++)
{
if(!used[i]&&low[i]>g[j][i])
{
low[i]=g[j][i];
set[i]=j;
}
}
}
return mst;
}