• [LUOGU] 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. 无向图
    2. 两倍数组大小
    3. 要求的不是边权之和,是最大的一条边
    //Writer:GhostCai && His Yellow Duck
    
    #include<iostream>
    #include<algorithm>
    #define MAXN 200005
    using namespace std;
    
    int m,n;
    int ans,links;
    
    int fa[MAXN];
    int fnd(int x){
        return (fa[x]==x)?x:fa[x]=fnd(fa[x]);
    }
    void cat(int x,int y){
        x=fnd(x);y=fnd(y);
        if(y!=x) fa[y]=x;
    }
    
    struct Edge{
        int from,to,next,w;
    }e[MAXN];
    int ecnt;
    inline void add(int x,int y,int w){
        e[++ecnt].to = y;
        e[ecnt].w = w;
        e[ecnt].from = x;
    }
    
    bool cmp(Edge x,Edge y){
        return x.w < y.w ;
    }
    
    int main(){
        cin>>n>>m;
        int x,y,w;
        for(int i=1;i<=n;i++) fa[i]=i;
        for(int i=1;i<=m;i++){
            cin>>x>>y>>w;
            add(x,y,w);
            add(y,x,w);
        }
        sort(e+1,e+1+ecnt,cmp);
        for(int i=1;i<=ecnt;i++){
            x=e[i].from ,y=e[i].to ;
            x=fnd(x);y=fnd(y);
            if(x!=y){
                cat(x,y);
    //          ans+=e[i].w ;
                ans=max(ans,e[i].w);//!!
                links++;
            }
        }
    //  cout<<ans<<endl;
        if(links!=n-1) cout<<-1<<endl;
        else cout<<ans<<endl;
        return 0;
    }
    

    本文来自博客园,作者:GhostCai,转载请注明原文链接:https://www.cnblogs.com/ghostcai/p/9247512.html

  • 相关阅读:
    【待补充】Spark 集群模式 && Spark Job 部署模式
    Spark 集群管理命令
    Spark job 部署模式
    [Spark Core] Spark 核心组件
    [Spark RDD_1] RDD 基本概念
    【读书笔记】《天才在左 疯子在右》
    [Spark Core] Spark 使用第三方 Jar 包的方式
    [Spark Core] 在 Spark 集群上运行程序
    【待补充】[Spark Core] Spark 实现标签生成
    Spark 集群搭建
  • 原文地址:https://www.cnblogs.com/ghostcai/p/9247512.html
Copyright © 2020-2023  润新知