题目背景

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

题目描述

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

输入格式

第11行两个正整数N,MN,M

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

输出格式

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

输入输出样例

输入 #1复制

  1. 4 4
  2. 1 2 6
  3. 1 3 4
  4. 1 4 5
  5. 4 2 3
输出 #1复制

  1. 5

说明/提示

N \le 1000,M \le 100000N≤1000,M≤100000

x \le N,y \le N,t \le 100000x≤N,y≤N,t≤100000

代码:

  1. 1 #include <algorithm>
  2. 2 #include <cstdio>
  3. 3 using namespace std;
  4. 4
  5. 5 struct Road
  6. 6 {
  7. 7 int x,y,t;
  8. 8 // x,y为道路连接的两个村庄
  9. 9 //t为修建道路所需要的时间,利用t给道路进行排序
  10. 10 };
  11. 11
  12. 12 int villages[1003]; //村庄 villages[x] = y 代表x的根节点为y,初始值为0
  13. 13 Road roads[100003]; //道路个数
  14. 14
  15. 15 bool cmp(const Road &a,const Road &b)
  16. 16 {
  17. 17 return a.t < b.t;
  18. 18 } //自定义一个cmp函数作为sort()的第三参数,以t为参照升序排序
  19. 19
  20. 20 int find(int x) //寻找x的上一节根节点,并执行路径压缩算法
  21. 21 {
  22. 22 int res = x; //储存x
  23. 23 while (villages[res])
  24. 24 {
  25. 25 res = villages[res]; //查:如果res不是根节点,就往上继续
  26. 26 }
  27. 27 //此时,res已经是根节点了
  28. 28 while (x!=res)
  29. 29 {
  30. 30 int tmp = villages[x];
  31. 31 villages[x] = res;
  32. 32 x = tmp;
  33. 33 } //路径压缩算法 将所有节点都放在第二层,一层一层上升
  34. 34 return res;
  35. 35 }
  36. 36
  37. 37 bool unions(int u,int v)
  38. 38 {
  39. 39 int fu = find(u),fv = find(v); //找到两个节点的根并比较
  40. 40 if (fu != fv)
  41. 41 {
  42. 42 villages[fu] = fv;
  43. 43 return true;
  44. 44 }
  45. 45 return false; //防止重复赋值
  46. 46 }
  47. 47
  48. 48 int main()
  49. 49 {
  50. 50 int n,m;
  51. 51 scanf("%d%d",&n,&m); //村庄数n,公路数m
  52. 52 for (int i = 0;i < m;++i)
  53. 53 {
  54. 54 scanf("%d%d%d",&roads[i].x,&roads[i].y,&roads[i].t);
  55. 55 }
  56. 56 sort(roads,roads + m,cmp);
  57. 57 for (int i = 0;i < m; ++i)
  58. 58 {
  59. 59 n -= unions(roads[i].x,roads[i].y);
  60. 60 if (n == 1)
  61. 61 {
  62. 62 printf("%d\n",roads[i].t);
  63. 63 break;
  64. 64 }
  65. 65 }
  66. 66 if (n > 1)
  67. 67 {
  68. 68 printf("-1\n");
  69. 69 }
  70. 70 return 0;
  71. 71 }

【简单数据结构】并查集--洛谷 P1111的更多相关文章

  1. 算法手记 之 数据结构(并查集详解)(POJ1703)

    <ACM/ICPC算法训练教程>读书笔记-这一次补上并查集的部分.将对并查集的思想进行详细阐述,并附上本人AC掉POJ1703的Code. 在一些有N个元素的集合应用问题中,通常会将每个元 ...

  2. ACM数据结构-并查集

    ACM数据结构-并查集   并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合 ...

  3. 洛谷 - P1111 - 修复公路 - 并查集

    https://www.luogu.org/problemnew/solution/P1111 并查集的水题,水题都错了好多发. 首先并不是有环就退出,而是连通分支为1才退出,每次合并成功连通分支才会 ...

  4. 洛谷 P1111 修复公路——并查集

    先上一波链接qwq https://www.luogu.org/problem/P1111 这题就是裸的并查集咯qwq 维护一下连通块的数目 数目变为一的时候整个图就连通了 输出此时的答案就okay拉 ...

  5. 洛谷 P1111 修复公路 Label:并查集

    题目背景 A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 题目描述 给出A地区的村庄数N,和公路数M,公路是双向的.并告诉你每条公路的连着哪两个村庄,并告诉你什么时 ...

  6. 洛谷P1111修复公路并查集改

    看了他们的题解感觉很震惊,为什么要用kruskal,这题要用到最小生成树吗??? 38行短短的程序就可以了,我觉得学习不是一种套用,套自己学的,而且题解很大一部分都是kruskal. 个人认为自己的程 ...

  7. The Suspects 简单的并查集

    Description 严重急性呼吸系统综合症( SARS), 一种原因不明的非典型性肺炎,从2003年3月中旬开始被认为是全球威胁.为了减少传播给别人的机会, 最好的策略是隔离可能的患者. 在Not ...

  8. The Suspects(简单的并查集)

    Description Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, wa ...

  9. 《挑战程序设计竞赛》2.4 数据结构-并查集 POJ1182 2236 1703 AOJ2170

    POJ1182 http://poj.org/problem?id=1182 题目 难得的中文题... 食物链 Time Limit: 1000MS Memory Limit: 10000K Tota ...

随机推荐

  1. Ubuntu上安装gevent

    安装libevent; 安装greenlet: sudo easy_install gevent (need net access) bingo! -> python-dev -> lib ...

  2. tomcat及springboot实现Filter、Servlet、Listener

    tomcat实现: 核心类org.apache.catalina.startup.ContextConfig //支持注解 see:org.apache.catalina.deploy.WebXml ...

  3. Java基础技术基础面试【笔记】

    Java基础技术基础面试[笔记] String.StringBuilder以及StringBuffer三者之间的区别? 三者的区别可以从可变性,线程安全性,性能这三个部分进行说明 可变性 从可变性来说 ...

  4. Mysql报错注入之floor报错详解

    一.简述 利用 select count(*),(floor(rand(0)*2))x from table group by x,导致数据库报错,通过 concat 函数,连接注入语句与 floor ...

  5. DVWA靶场之File Inclusion(文件包含)通关

    文件包含,未经过严格过滤,将一些恶意构造带入了包含函数,可以使用一些包含函数来包含一些其他乱七八糟的东西,要么导致任意文件读取,要么命令执行 文件包含包括远程文件包含(RFI)和本地文件包含(LFI) ...

  6. Sqli-Labs less38-45

    less-38 前置基础知识:堆叠注入 参考链接:https://www.cnblogs.com/lcamry/p/5762905.html 实际上就是多条sql语句一起使用. 在38关源码中加入输出 ...

  7. noip12

    T1 类似于昨天的t3,先用单调栈求出管控区间,然后暴力求解30pts 我没取模还没开longlong,然后就爆0了 正解: 仍然是用单调栈求一下区间,用线段树维护一下余数,对于i所对应的区间\([l ...

  8. Sadmin:打造私有Django公共库实现代码复用

    我们借助于Django开发了许多的内部管理系统,例如之前介绍过的Probius.Kerrigan.Proxy等等,这些系统看起来长的都一样,但实际实现的功能确是千差万别,这些不同的系统为什么会长的一样 ...

  9. .NET Core程序发布报错:project.assets.json”没有“.NETCoreApp,Version=v3.1/win-x64”的目标。确保已运行还原,且“netcoreapp3.1”已包含在项目的 TargetFrameworks中。

    在控制台中使用命令发布.NET Core程序的时候,报如下的错误: project.assets.json"没有".NETCoreApp,Version=v3.1/win-x64& ...

  10. 【spring 注解驱动开发】spring ioc 原理

    尚学堂spring 注解驱动开发学习笔记之 - Spring容器创建 Spring容器创建 1.Spring容器创建-BeanFactory预准备 2.Spring容器创建-执行BeanFactory ...