zoukankan      html  css  js  c++  java
  • P1111 修复公路 洛谷

    https://www.luogu.org/problem/show?pid=1111

    题目背景

    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

    #include <algorithm>
    #include <iostream>
    #include <cstdio>
    
    using namespace std;
    
    int n,m,tot,day,tot_fa,ans;
    int fa[1000015];
    bool num[1000015];
    struct node
    {
        int x,y,t;
    } w[1000015];
    
    bool cmp(node a,node b)
    {
        return a.t<b.t;
    }
    
    int find(int x)
    {
        if(x!=fa[x])
            return fa[x]=find(fa[x]);
        return x;
    }
    
    int main()
    {
        cin>>n>>m;
        for(int i=1;i<=n;i++)    fa[i]=i;
        for(int i=1;i<=m;i++)
            cin>>w[i].x>>w[i].y>>w[i].t;
        sort(w+1,w+m+1,cmp);
        for(int i=1;i<=m;i++)
        {
            int fa_x=find(w[i].x),fa_y=find(w[i].y);
            if(fa_x!=fa_y)
            {
                fa[fa_x]=fa_y;
                day=max(day,w[i].t);
                ans++;
            }
            if(ans==n-1)
            {
                cout<<day;
                return 0;
            }
        }
        cout<<-1;
        return 0;
    }
    ——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。
  • 相关阅读:
    js数组的迭代
    js检测对象的类型
    java基本数据类型及相互间的转换
    Mybatis Jdbctype JavaType 类型转换器
    Android TableLayout
    android:id设置的三种方式区别在哪?
    android:layout_gravity 和 android:gravity 的区别
    Android LinearLayout
    Log4j 分别使用不同的配置文件
    Extjs GridPanel 中放入 Combox显示问题
  • 原文地址:https://www.cnblogs.com/Shy-key/p/6516972.html
Copyright © 2011-2022 走看看