zoukankan      html  css  js  c++  java
  • [ luogu ] P111 修理公路

    题目背景

    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<bits/stdc++.h>
     2 using namespace std;
     3 struct f{int x,y,t;} a[100050];
     4   
     5   int cmp(f a,f b)//自定义排列结构体,时间由短到长排序 
     6 {
     7      if(a.t!=b.t) 
     8         return a.t<b.t;
     9      else 
    10         return a.x<b.x;
    11 }
    12 int n,m;
    13 int root[10500],size[10500];//root代表空间,把相互连通的道路编入一个空间里
    14                             //size代表数量,当一个房间数量与总数相同时,所有道路连通 
    15    int find(int x) 
    16 {
    17      if(root[x]!=x)//当该道路的空间不属于它本身时,寻找它所属的空间 
    18        root[x]=find(root[x]);
    19          return root[x];
    20 }
    21  
    22 int main()
    23 {
    24       cin>>n>>m;//n代表村庄总数,m代表指令的数量 
    25     for(int i=1;i<=m;i++)
    26        cin>>a[i].x>>a[i].y>>a[i].t;//输入题目中的两个村庄(x,y)和时间(t) 
    27     
    28     sort(a+1,a+1+m,cmp);//上面所写到的排序 
    29 
    30 for(int i=1;i<=n;i++)
    31 {
    32      root[i]=i; 
    33      size[i]=1;
    34 }//初始化定义每个村庄空间属于自己,空间数量为1 
    35 
    36 int l=1;
    37 while(l<=m)//从第一条指令开始读入 
    38 { int q,p;
    39   q=a[l].x;
    40   p=a[l].y;
    41   int rq,rp;//rq,rp代表p和q所在的空间 
    42   rq=find(q);rp=find(p);
    43   if(rq!=rp)//当两个村庄空间不同的时候,合并起来,数量集中在一个空间中 
    44  {root[rq]=root[rp];
    45   size[rp]+=size[rq];
    46   size[rq]=0;//清零,防止出事 
    47   if(size[rp]==n)//当一个房间数量与总数相同时,所有道路连通 
    48   {cout<<a[l].t;break;}}
    49   if(l==m)//如果满足题意,上面已经退出= = 
    50   {cout<<-1;break;}
    51    l++;}
    52    
    53   return 0;
    54 }
  • 相关阅读:
    spring-boot:run启动时,如何带设置环境参数dev,test.
    git多人参与的项目 -> 分支代码如何合并到主干
    如何使用IDEA运行 一个分布式的项目
    学习反射 并尝试写一个反射的工具类
    SVN提交大量无效文件补救方法
    IDEA基础配置
    Eclipse常用快捷键与IDEA中的对比.
    如何运行一个分布式的Maven项目
    Java常考面试题整理(六)
    python并发——多进程中的异常捕获
  • 原文地址:https://www.cnblogs.com/lyyl/p/7222619.html
Copyright © 2011-2022 走看看