zoukankan      html  css  js  c++  java
  • 最小生成树 kruskal算法 codevs 1638 修复公路

    1638 修复公路

     

     时间限制: 1 s
     空间限制: 256000 KB
     题目等级 : 钻石 Diamond
     
     
     
    题目描述 Description

    A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车。政府派人修复这些公路。

    给出A地区的村庄数N,和公路数M,公路是双向的。并告诉你每条公路的连着哪两个村庄,并告诉你什么时候能修完这条公路。问最早什么时候任意两个村庄能够通车,即最早什么时候任意两条村庄都存在至少一条修复完成的道路(可以由多条公路连成一条道路)

    输入描述 Input Description

    第1行两个正整数N,M(N<=1000,M<=100000)

    下面M行,每行3个正整数x, y, t,告诉你这条公路连着x,y两个村庄,在时间t时能修复完成这条公路。(x<=N,y<=N,t<=100000)

    输出描述 Output Description

    如果全部公路修复完毕仍然存在两个村庄无法通车,则输出-1,否则输出最早什么时候任意两个村庄能够通车。

    样例输入 Sample Input

    4 4

    1 2 6

    1 3 4

    1 4 5

    4 2 3

    样例输出 Sample Output

    5

     1 /*
     2 题目的意思很容易就得出:这个题是求一张图的最小生成树的最大边的。
     3 写程序的时候,没注意把father[x1]=y1;写成了father[x1]==y1;结果只有20分啊!
     4 */
     5 #define N 1005
     6 #define M 100010
     7 #include<iostream>
     8 using namespace std;
     9 #include<cstdio>
    10 #include<algorithm>
    11 int n,m;
    12 struct Edge{
    13     int u,v,w;
    14     bool operator <(Edge P)
    15     const{return w<P.w;}
    16 }edge[M];
    17 int father[N];
    18 void input()
    19 {
    20     scanf("%d%d",&n,&m);
    21     for(int i=1;i<=m;++i)
    22       scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].w);
    23     sort(edge+1,edge+m+1);
    24 }
    25 int find1(int x)
    26 {
    27     return (father[x]==x)?x:father[x]=find1(father[x]);
    28 }
    29 int kruskal()
    30 {
    31     for(int i=1;i<=n;++i)
    32       father[i]=i;
    33     int sum=0;
    34     for(int i=1;i<=m;++i)
    35     {
    36         int x1=find1(edge[i].u);
    37         int y1=find1(edge[i].v);
    38         if(x1!=y1)
    39         {
    40             sum++;
    41             father[x1]=y1;
    42             if(sum==n-1)
    43               return edge[i].w;
    44         }
    45     }
    46     return -1;
    47 }
    48 int main()
    49 {
    50     input();
    51     printf("%d
    ",kruskal());
    52     return 0;
    53 }
  • 相关阅读:
    Reasoning and Learing学习笔记
    Study in JI During the Summer Vacation
    2018-计算机系机试-A
    2018-计算机系机试(第二批)-E-绝对值排序
    2018-计算机系机试(第二批)-D-最小差值
    2018-计算机系机试(第二批)-C-数字字符个数
    2018-计算机系机试(第二批)-B-二进制输出
    2018-计算机系机试(第二批)-A-最大数
    2018-软工机试-E-热河路(TLE只拿了90分,待思考)
    2015年四川省赛
  • 原文地址:https://www.cnblogs.com/c1299401227/p/6005775.html
Copyright © 2011-2022 走看看