比赛 |
防止浮躁的小练习V0.1 |
评测结果 |
AAAAAAAAAA |
题目名称 |
通信线路 |
最终得分 |
100 |
用户昵称 |
森林 |
运行时间 |
1.350 s |
代码语言 |
C++ |
内存使用 |
96.06 MiB |
提交时间 |
2016-10-07 16:40:22 |
显示代码纯文本
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<ctime>
#include<algorithm>
#include<stack>
#include<queue>
#include<vector>
#include<functional>
using namespace std;
#define maxn 5010
#define ma 0x7f7f7f7f
int asa[maxn][maxn];
int Prim(int G[maxn][maxn],int v,int sta){
int mst=0,lowcost[maxn];
memset(lowcost,0x7f,sizeof(lowcost));
bool used[maxn]={0};
for(int i=0;i<v;i++)
lowcost[i]=G[sta][i];
used[sta]=1;
for(int i=1;i<=v-1;i++){/*zhaon-1bain*/
int j=0,min=ma;
for(int k=0;k<v;k++)
if(!used[k]&&lowcost[k]<min){
min=lowcost[k];
j=k;
}
used[j]=1;
mst+=min;
for(int k=0;k<v;k++)
if(!used[k]&&G[j][k]<lowcost[k])
lowcost[k]=G[j][k];
}
return mst;
}
int main(){
freopen("mcst.in","r",stdin);
freopen("mcst.out","w",stdout);
memset(asa,0x7f,sizeof(asa));
int n;scanf("%d",&n);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++){
int a;
scanf("%d",&a);
if(a==-1)continue;
asa[i][j]=a;
}
int k=Prim(asa,n,0);
printf("%d",k);
return 0;
}/**/