原题
http://poj.org/problem?id=2485
//题目意思就是取最小生成树各条边里面的最大的那条。prime模板低空飘过。
//英语题要仔细看题才行啊
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <ctype.h>
#include <malloc.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#include <deque>
#include <set>
#include <vector>
#include <math.h>
#include <string>
using namespace std;
#define N 520
#define INF 99999999
int dis[N][N];
int vis[N];
int g[N];
int map[N][N];
int n;
void Prime(){
int i,j;
int sum = -100000;
memset(vis,0,sizeof(vis));
for(i=0;i<n;i++){
g[i] = dis[0][i];
}
vis[0] = 1;
int tmp;
int k;
for(i=1;i<n;i++){
tmp = INF;
for(j=0;j<n;j++){
if(tmp>g[j] && vis[j]==0){
tmp = g[j];
k = j;
}
}
if(tmp == INF)
break;
else{
vis[k] = 1;
if(tmp > sum)//进行比较,获得最大值
sum = tmp;
for(j=0;j<n;j++){
if(vis[j]==0 && dis[k][j]<g[j])
g[j] = dis[k][j];
}
}
}
printf("%d\n",sum);
}
int main(){
int t;
int i,j;
while(~scanf("%d",&t)){
while(t--){
memset(dis,0,sizeof(dis));
memset(map,0,sizeof(map));
memset(g,0,sizeof(g));
scanf("%d",&n);
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&map[i][j]);
}
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
dis[i][j] = map[i][j];
}
}
Prime();
}
}
return 0;
}