package prim;
import java.util.Scanner;
/**问题请参考http://poj.org/problem?id=2485
* @author rayli
* @date:2014-7-28 下午2:52:24
* 题意 :一个小岛上 要建高速公路,该小岛上有N个村庄,给出 每个村庄到其他村庄的 距离。
* 即 给出一个含有 N个顶点的无向完全联通图,求 该图生成的最小生成树边集中的最大权值;
*
*/
public class Highways
{
static int map[][];//无向图的边
int ans; //最大权值
void prim()
{
ans = -1;
int cost[] = new int[map.length];//cost[j]为temp没加入到生成树集合U前节点j到生成树的最小花费
for(int i=0; i<map.length; i++)
{
cost[i] = map[0][i];
}
for(int i=0; i<map.length-1; i++)
{
int minum = Integer.MAX_VALUE;
int tmp = 0;
for(int j=0; j<map.length; j++)
{
if(cost[j] > 0 && minum > cost[j])
{
minum = cost[j];
tmp = j;
}
}
if(ans < minum)
ans = minum;
cost[tmp] = 0;
for(int j=0; j<map.length; j++)
{
if(map[tmp][j] < cost[j])
{
cost[j] = map[tmp][j];
}
}
}
}
void output()
{
System.out.println(ans);
}
public static void main(String args[])
{
Scanner cin = new Scanner(System.in);
//树的个数
int n = cin.nextInt();
for(int i=0; i<n; i++)
{
int m = cin.nextInt();//村庄的个数即定点的个数
map = new int[m][m];
for(int j=0; j<m; j++)
for(int k=0; k<m; k++)
{
map[j][k] = cin.nextInt();
}
Highways hw = new Highways();
hw.prim();
hw.output();
}
cin.close();
}
}
import java.util.Scanner;
/**问题请参考http://poj.org/problem?id=2485
* @author rayli
* @date:2014-7-28 下午2:52:24
* 题意 :一个小岛上 要建高速公路,该小岛上有N个村庄,给出 每个村庄到其他村庄的 距离。
* 即 给出一个含有 N个顶点的无向完全联通图,求 该图生成的最小生成树边集中的最大权值;
*
*/
public class Highways
{
static int map[][];//无向图的边
int ans; //最大权值
void prim()
{
ans = -1;
int cost[] = new int[map.length];//cost[j]为temp没加入到生成树集合U前节点j到生成树的最小花费
for(int i=0; i<map.length; i++)
{
cost[i] = map[0][i];
}
for(int i=0; i<map.length-1; i++)
{
int minum = Integer.MAX_VALUE;
int tmp = 0;
for(int j=0; j<map.length; j++)
{
if(cost[j] > 0 && minum > cost[j])
{
minum = cost[j];
tmp = j;
}
}
if(ans < minum)
ans = minum;
cost[tmp] = 0;
for(int j=0; j<map.length; j++)
{
if(map[tmp][j] < cost[j])
{
cost[j] = map[tmp][j];
}
}
}
}
void output()
{
System.out.println(ans);
}
public static void main(String args[])
{
Scanner cin = new Scanner(System.in);
//树的个数
int n = cin.nextInt();
for(int i=0; i<n; i++)
{
int m = cin.nextInt();//村庄的个数即定点的个数
map = new int[m][m];
for(int j=0; j<m; j++)
for(int k=0; k<m; k++)
{
map[j][k] = cin.nextInt();
}
Highways hw = new Highways();
hw.prim();
hw.output();
}
cin.close();
}
}