题目背景

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

题目描述

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

输入格式

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

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

输出格式

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

输入输出样例

输入 #1复制

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

    文本处理sed sed:流编辑器,过滤和替换文本 工作原理:sed命令将当前处理的行读入模式空间进行处理,处理完把结果输出,并且清空模式空间. 然后再将下一行读入模式空间进行处理输出,以此类推,直到最 ...

  2. XSS挑战20关

    第一关: 没有过滤,直接构造payload过关: http://127.0.0.1/xssgame/level1.php?name=test%3Cscript%3Ealert%28111%29%3C/ ...

  3. SpringCloud升级之路2020.0.x版-18.Eureka的客户端核心设计和配置

    本系列代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford Eureka 客户 ...

  4. 线程 Thread类 GIL锁 信号量 Event事件

    线程的开启方法 进程是操作系统调度的最小单位,一个进程最少有一个主线程,而一个进程中可以开启多个线程 from threading import Thread def task(): print('A ...

  5. oracle给system用户增加sysdba和sysoper 角色

    第一步:先用sys用户登录到数据库 第二步:打开一个sql窗口,输入grant sysoper to system;  点击执行 第三步:等待执行完成之后,再执行grant sysdba to sys ...

  6. .net core 通过动软连接数据库

    .net core 与动软 首先创建asp.net core 或者 .net core 控制台程序.不需急着创建web.config 文件. 通过NuGet加个ado的包 System.Data.Sq ...

  7. window 右键菜单中添加在vs code 打开

    原文链接: window 右键菜单中添加在vs code 打开 window 右键菜单中添加在vs code 打开 吃码小妖:以前安装VS code可以的,后面不知道为什么不能右键在VS code中打 ...

  8. asp.net MVC 的路由匹配

  9. wpf 滚动文字 跑马灯

    有时候也会有用,比如我的软件界面 放不下全长的文字时.或者状态栏显示一些时间,地点,温度,湿度等等这些东西 代码链接  https://gitee.com/csszbb/wpfnet5 这属于WPF ...

  10. C#综合细说进程、应用程序域与上下文

    引言 本文主要是介绍进程(Process).应用程序域(AppDomain)..NET上下文(Context)的概念与操作. 虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提 ...