题目大意:n个村庄,给你这n个村庄之间权值的邻接矩阵,让你求出该图所生成的最小生成树的最大边。
分析:和POJ1789一样,只需把纪录生成树权值的变量改成用来存放该生成树中的最大边即可。
实现代码如下:
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
#define INF 999999999
#define MAX 505
int map[MAX][MAX];
bool s[MAX];
int dist[MAX];
int n;
int prime()
{
memset(s,false,sizeof(s));
for(int i=1;i<=n;i++)
dist[i]=map[1][i];
s[1]=true;
int sum=0;
for(int i=1;i<=n;i++)
{
int tmp=INF;
int u=1;
for(int j=1;j<=n;j++)
if(!s[j]&&dist[j]<tmp)
{
tmp=dist[j];
u=j;
}
s[u]=true;
sum=max(sum,dist[u]);
for(int j=1;j<=n;j++)
if(!s[j]&&dist[j]>map[u][j])
dist[j]=map[u][j];
}
return sum;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&map[i][j]);
printf("%d\n",prime());
}
return 0;
}