package prim;
import java.util.Scanner;
/**问题请参考http://poj.org/problem?id=1258
* @author rayli
* @date:2014-7-29 下午1:38:22
* @题意 :Farmer John有当选为新镇长,他的竞选宣言就是把网络带入所有的farm。
* 现在给出farm的个数n,以及每两个farm之间的联网距离,让你找出一条最短的路径能连接上所有的farm。和2485题一样几乎不用改
*
*/
public class AgriNet
{
static int map[][];//无向图的边
int ans; //最大权值
void prim()
{
ans = 0;
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=1; j<map.length; j++)
{
if(cost[j] > 0 && minum > cost[j])
{
minum = cost[j];
tmp = j;
}
}
if(ans != Integer.MAX_VALUE)
ans += minum;
cost[tmp] = 0;
for(int j=1; 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);
while(cin.hasNext()) //刚开始没有这一行,还以为一次只运行一组数据呢,WA了好几次
{
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();
}
AgriNet an = new AgriNet();
an.prim();
an.output();
}
cin.close();
}
}
import java.util.Scanner;
/**问题请参考http://poj.org/problem?id=1258
* @author rayli
* @date:2014-7-29 下午1:38:22
* @题意 :Farmer John有当选为新镇长,他的竞选宣言就是把网络带入所有的farm。
* 现在给出farm的个数n,以及每两个farm之间的联网距离,让你找出一条最短的路径能连接上所有的farm。和2485题一样几乎不用改
*
*/
public class AgriNet
{
static int map[][];//无向图的边
int ans; //最大权值
void prim()
{
ans = 0;
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=1; j<map.length; j++)
{
if(cost[j] > 0 && minum > cost[j])
{
minum = cost[j];
tmp = j;
}
}
if(ans != Integer.MAX_VALUE)
ans += minum;
cost[tmp] = 0;
for(int j=1; 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);
while(cin.hasNext()) //刚开始没有这一行,还以为一次只运行一组数据呢,WA了好几次
{
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();
}
AgriNet an = new AgriNet();
an.prim();
an.output();
}
cin.close();
}
}