Out of Hay

Posted 66dzb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Out of Hay相关的知识,希望对你有一定的参考价值。

题目背景

奶牛爱干草

题目描述

Bessie 计划调查N (2 <= N <= 2,000)个农场的干草情况,它从1号农场出发。农场之间总共有M (1 <= M <= 10,000)条双向道路,所有道路的总长度不超过1,000,000,000。有些农场之间存在着多条道路,所有的农场之间都是连通的。

Bessie希望计算出该图中最小生成树中的最长边的长度。

输入格式

两个整数N和M。

接下来M行,每行三个用空格隔开的整数A_i, B_i和L_i,表示A_i和 B_i之间有一条道路长度为L_i。

输出格式

一个整数,表示最小生成树中的最长边的长度。

输入输出样例

输入 #1
3 3

1 2 23

2 3 1000

1 3 43
输出 #1
43

【解题思路】
最小生成树Kruskal
判断最长边就OK了
【code】
 1 #include <cstdio>
 2 #include <iostream>
 3 #include <algorithm>
 4 using namespace std;
 5 int n,m,k,ans=-1<<30;
 6 int fa[10005];
 7 struct Node{
 8     int x;
 9     int y;
10     int z;
11 }a[10005];
12 inline bool cmp(const Node &a,const Node &b){
13     return a.z<b.z;
14 }
15 inline int Find(int i){
16     if(fa[i]==i)return i;
17     return fa[i]=Find(fa[i]);
18 }
19 inline void Kruskal(){
20     for(register int i=1;i<=m;i++){
21         if(Find(a[i].x)!=Find(a[i].y)){
22             int f1=Find(a[i].x);
23             int f2=Find(a[i].y);
24             if(f1!=f2)fa[f1]=f2;
25             k++;
26             if(a[i].z>ans)ans=a[i].z;
27         }
28         if(k==n-1)break;
29     } 
30 }
31 int main(){
32     //freopen("1547.in","r",stdin);
33     //freopen("1547.out","w",stdout);
34     scanf("%d%d",&n,&m);
35     for(register int i=1;i<=m;i++)
36         scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
37     for(register int i=1;i<=n;i++)
38         fa[i]=i;
39     sort(a+1,a+m+1,cmp);
40     Kruskal();
41     printf("%d
",ans);
42     return 0;
43 }

 

以上是关于Out of Hay的主要内容,如果未能解决你的问题,请参考以下文章

Out of Hay(poj2395)(并查集)

POJ 2395 Out of Hay

Out of Hay

P1547 Out of Hay

洛谷——P1547 Out of Hay

洛谷 P1547 Out of Hay 题解