码迷,mamicode.com
首页 > 其他好文 > 详细

Out of Hay

时间:2019-09-12 23:20:37      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:RKE   algo   接下来   data-   bsp   ssi   break   超过   pen   

题目背景

奶牛爱干草

题目描述

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\n",ans);
42     return 0;
43 }

 

Out of Hay

标签:RKE   algo   接下来   data-   bsp   ssi   break   超过   pen   

原文地址:https://www.cnblogs.com/66dzb/p/11515472.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!