• 洛谷 P1111 修复公路


    题目背景

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

    题目描述

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

    输入输出格式

    输入格式:

    第1行两个正整数N,M

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

    输出格式:

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

    输入输出样例

    输入样例#1:
    4 4
    1 2 6
    1 3 4
    1 4 5
    4 2 3
    输出样例#1:
    5

    说明

    N<=1000,M<=100000

    x<=N,y<=N,t<=100000

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 
     5 using namespace std;
     6 const int N=1010;
     7 
     8 int f[N];
     9 int now;
    10 int ans[N];
    11 
    12 struct node{
    13     int u,v,w;
    14 }E[N*100];
    15 
    16 inline void read(int &x)
    17 {
    18     char c=getchar();
    19     x=0;
    20     while(c<'0'||c>'9')c=getchar();
    21     while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();
    22 }
    23 
    24 inline int find(int x)
    25 {
    26     if(f[x]!=x)
    27         f[x]=find(f[x]);
    28     return f[x];
    29 }
    30 
    31 inline void un(int x,int y)
    32 {
    33     f[find(x)]=find(y);
    34 }
    35 
    36 inline bool cmp(node a,node b)
    37 {
    38     return a.w<b.w;
    39 }
    40 
    41 int main()
    42 {
    43     int n,m;
    44     read(n);read(m);
    45     for(int i=1;i<=n;i++)
    46         f[i]=i;
    47     for(int i=1;i<=m;i++)
    48     {
    49         read(E[i].u);
    50         read(E[i].v);
    51         read(E[i].w);
    52     }
    53     sort(E+1,E+m+1,cmp);
    54      
    55      int tot=0;    
    56     for(int i=1;i<=m;i++)
    57     {
    58         if(find(E[i].u)!=find(E[i].v))
    59         {
    60             un(E[i].u,E[i].v);
    61             tot++;
    62             ans[tot]=E[i].w;
    63         }
    64         if(tot==n-1)break;
    65     }
    66     if(tot!=n-1)printf("-1");
    67     else 
    68     {
    69         sort(ans+1,ans+tot+1);
    70         printf("%d",ans[tot]);
    71     }
    72     return 0;
    73 }
  • 相关阅读:
    java并发AtomicIntegerArray
    java并发:原子类之AtomicLong
    java并发:初探消费者和生产者模式
    java并发:初探用户线程和守护线程
    java并发:interrupt进程终止
    java并发:join源码分析
    java并发:初探sleep方法
    java并发(二):初探syncronized
    java并发(一):初探线程的创建
    Git 操作
  • 原文地址:https://www.cnblogs.com/lyqlyq/p/6869672.html
Copyright © 2020-2023  润新知