题意:求最小生成树中最大的一条边。

分析:求最小生成树,可用Prim和Kruskal算法。一般稀疏图用Kruskal比较适合,稠密图用Prim。由于Kruskal的思想是把非连通的N个顶点用最小的代价构成一个连通分量,这与并查集的思想类似,所以可以用并查集来实现Kruskal。

import java.util.Scanner;

/**
* 稀疏图用Prim,21316K,3047MS 不划算、
*/
public class Poj_2395_Prim { static int n,m;
static int[][] map=new int[2010][2010];
static boolean vis[]=new boolean[2010]; public static int prime() {
int i,j,min,flag = 0,max=-1; vis[1]=true;
for(i=2;i<=n;i++){
min=Integer.MAX_VALUE;
flag=0;
for(j=1;j<=n;j++){
if(!vis[j] && map[1][j] < min){
min=map[1][j];
flag=j;
}
}
vis[flag]=true;
max = max < min ? min : max;
for(j=1;j<=n;j++){
if(!vis[j] && map[flag][j] <map[1][j]){
map[1][j]=map[flag][j];
}
}
}
return max;
} public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt(); for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
map[i][j]=Integer.MAX_VALUE;
}
map[i][i]=0;
} for (int i = 1; i <= m; i++) {
int s=sc.nextInt();
int e=sc.nextInt();
int val=sc.nextInt();
if(map[s][e] > val){
map[s][e] = val;
map[e][s]=val;
}
} System.out.println(prime());
}
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner; class Edge{
int s;
int e;
int val;
public Edge(int s,int e,int val){
this.s=s;
this.e=e;
this.val=val;
}
} class Com implements Comparator<Edge>{
@Override
public int compare(Edge o1, Edge o2) {
// TODO Auto-generated method stub
return o1.val - o2.val;
}
} /**
*Kruskal
*/
public class Poj_2395_kruskal { static int n,m;
static int MAX = 4000000;
static ArrayList<Edge> list = new ArrayList<Edge>();
static int set[] = new int[MAX]; static void init_set(){
for(int i=1;i<=n;i++){
set[i]=i;
}
} static int find(int a){
if(set[a] == a){
return a;
}else{
return set[a]=find(set[a]);
}
} static void unite(int x,int y){ x = find(x);
y = find(y);
if (x == y)
return;
if (y < x)
set[x] = y;
else if (y > x)
set[y] = x;
} static boolean same(int x, int y){
return find(x) == find(y);
} static int kruskal(){
int ans=-1;
init_set();
for(int i=0;i < list.size();i++){
Edge e =list.get(i);
if (!same(e.s, e.e)){
unite(e.s, e.e);
if (ans < e.val)
ans = e.val;
}
}
return ans;
} public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt(); for (int i = 1; i <= m; i++) {
int s=sc.nextInt();
int e=sc.nextInt();
int val=sc.nextInt();
list.add(new Edge(s,e,val));
}
Collections.sort(list,new Com());
System.out.println(kruskal());
}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

Poj 2395 Out of Hay( 最小生成树 )的更多相关文章

  1. POJ 2395 Out of Hay(最小生成树中的最大长度)

    POJ 2395 Out of Hay 本题是要求最小生成树中的最大长度, 无向边,初始化es结构体时要加倍,别忘了init(n)并查集的初始化,同时要单独标记使用过的边数, 判断ans==n-1时, ...

  2. poj 2395 Out of Hay(最小生成树,水)

    Description The cows have run <= N <= ,) farms (numbered ..N); Bessie starts at Farm . She'll ...

  3. 瓶颈生成树与最小生成树 POJ 2395 Out of Hay

    百度百科:瓶颈生成树 瓶颈生成树 :无向图G的一颗瓶颈生成树是这样的一颗生成树,它最大的边权值在G的所有生成树中是最小的.瓶颈生成树的值为T中最大权值边的权. 无向图的最小生成树一定是瓶颈生成树,但瓶 ...

  4. POJ 2395 Out of Hay(求最小生成树的最长边+kruskal)

    Out of Hay Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 18472   Accepted: 7318 Descr ...

  5. POJ 2395 Out of Hay( 最小生成树 )

    链接:传送门 题意:求最小生成树中的权值最大边 /************************************************************************* & ...

  6. poj - 2377 Bad Cowtractors&&poj 2395 Out of Hay(最大生成树)

    http://poj.org/problem?id=2377 bessie要为FJ的N个农场联网,给出M条联通的线路,每条线路需要花费C,因为意识到FJ不想付钱,所以bsssie想把工作做的很糟糕,她 ...

  7. POJ 2395 Out of Hay(MST)

    [题目链接]http://poj.org/problem?id=2395 [解题思路]找最小生成树中权值最大的那条边输出,模板过的,出现了几个问题,开的数据不够大导致运行错误,第一次用模板,理解得不够 ...

  8. POJ 2395 Out of Hay (prim)

    题目链接 Description The cows have run out of hay, a horrible event that must be remedied immediately. B ...

  9. POJ 2395 Out of Hay 草荒 (MST,Kruscal,最小瓶颈树)

    题意:Bessie要从牧场1到达各大牧场去,他从不关心他要走多远,他只关心他的水袋够不够水,他可以在任意牧场补给水,问他走完各大牧场,最多的一次需要多少带多少单位的水? 思路:其实就是要让所带的水尽量 ...

随机推荐

  1. Python字符串格式转换

    转换类型 转换类型 说明 d, i 带符号十进制 b 无符号二进制 o 无符号八进制 u 无符号十进制 x 无符号十六进制(小写) X 无符号十六进制(大写) e 科学计数法表示的浮点数(小写) E ...

  2. 七 、linux正则表达式

    为处理大量的字符串而定义的一套规则和方法 1)linux正则表达式以行为单位处理 2)alians grep = “grep –color=auto”,让匹配的内容显示颜色 3)注意字符集,expor ...

  3. 后向传播算法“backpropragation”详解

    为什么要使用backpropagation? 梯度下降不用多说,如果不清楚的可以参考梯度下降算法. 神经网络的参数集合theta,包括超级多组weight和bais. 要使用梯度下降,就需要计算每一个 ...

  4. 【转载】Java类加载原理解析

    Java类加载原理解析 原文出处:http://www.blogjava.net/zhuxing/archive/2008/08/08/220841.html 1       基本信息 摘要: 每个j ...

  5. BZOJ 1941 kd-tree

    模板题 题意说的可能有点不清楚 一开始的点必须在给定的n个点里面 所以枚举点 然后ask最大和最小值 估价函数中 最大值的写法和最小值不同 全部取max 而最小值在估价时 如果在某个点管辖的空间里 就 ...

  6. 好的SQL写法

    DECLARE @beginTime VARCHAR(20)= '2017-12-20 00:00:00';DECLARE @endTime VARCHAR(20)= '2017-12-26 00:0 ...

  7. 51nod 1289 大鱼吃小鱼 栈

    1289 大鱼吃小鱼 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 有N条鱼每条鱼的位置及大小均不同,他们沿着X轴游动,有的向左,有的向右.游动的速度是一样的,两条 ...

  8. python中的一些编码问题

    声明Python源码编码方式 在程序的开始写上:# -*- coding: utf-8 -*- # -*- coding: gbk -*- 注: decode是将其它编码方式转换成unicode编码 ...

  9. Hbase- Hbase客户端读写数据时的路由流程

    1.客户端先到zookeeper查找hbase:meta所在的RegionServer服务器 2.去hbase:meta表查找自己所要的数据所在的region server 3.去目标region s ...

  10. review23

    文件的创建与删除 当使用File类创建一个文件对象后,例如 File file = new File("C:\\myletter", "letter.txt") ...