//题目大意:题意很简单,就是求最小生成树的最大边。
Sample Input
1
3
0 990 692
990 0 179
692 179 0
Sample Output
692
XXX:给定了邻接矩阵,直接用Prim吧。
AC Code :Prim Memory:564K Time:141Ms
#include <cstring> #include <cstdio> #include <iostream>
#include <algorithm>
#define MaxV 505
#define Inf 0x7fffffff
using namespace std;
int n;
int map[MaxV][MaxV];
int dist[MaxV];
int longest;
int value;
void prim()
{
int i,j;
int s,k,num,min;
int p[MaxV];
longest=0;//最小生成树中最大边
value=0; //最小生成树总权值
for(i=1;i<=n;i++)
dist[i]=Inf;
memset(p,0,sizeof(p));
s=1,k=0;
while(1)
{ k++;
p[s]=1;
if(k==n)
break;
num=0;
min=Inf;
for(j=2;j<=n;j++)
{
if(p[j])
continue;
if(dist[j]>map[s][j])
dist[j]=map[s][j];
if(dist[j]<min)
{
min=dist[j];
num=j;}
}
s=num;
value+=min;
longest=max(longest,min);
}
}
void init()
{
int i,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&map[i][j]);
}
int main()
{
//freopen("in.txt","r",stdin);
int test;
scanf("%d",&test);
while(test--)
{
init();
prim();
printf("%d\n",longest);
}
return 0;
}