您的位置:首页 > 其它

ZOJ 1586 QS Network

2010-09-20 22:57 239 查看
我wa死了,是因为点的权值没有很好地记录下来,后来看sunkehappy的解题报告,明白这题需要在初始化的时候把点的权值加到边上,这样就可以省去最后计算的麻烦了,改了之后就直接过了。。哎,,苍天啊。。

#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;
const int M = 1001;
const int INF = 99999999;
int mat[M][M];
int ada[M],dist[M],flag[M];
int main(void)
{
int cases,n;
int i,j,now;
int min,sum;
cin >> cases;
while( cases-- )
{
cin >> n;
for( i = 1; i <= n; i++ )
cin >> ada[i];ada[0]=0;

for( i = 1; i <= n; i++ )
for( j = 1; j <= n; j++ )
{
cin >> mat[i][j];
mat[i][j] += ada[i];
mat[i][j] += ada[j];
}

for( i = 1; i <= n; i++ )
{
dist[i] = INF;
flag[i] =  0;
}

sum = 0;
dist[now=1]=0;
flag[now] = 1;
for( i = 1; i < n; i++ )
{
for( j = 1; j <= n; j++ )
if( !flag[j] && dist[j] > mat[now][j] )
dist[j] = mat[now][j];
for( j = 1,min = INF; j <= n; j++ )
if( !flag[j] && dist[j] < min )
min = dist[now=j];
flag[now] = 1;
sum += min;
}
cout << sum << endl;
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: