【简单数据结构】并查集--洛谷 P1111
题目背景
AA地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车。政府派人修复这些公路。
题目描述
给出A地区的村庄数NN,和公路数MM,公路是双向的。并告诉你每条公路的连着哪两个村庄,并告诉你什么时候能修完这条公路。问最早什么时候任意两个村庄能够通车,即最早什么时候任意两条村庄都存在至少一条修复完成的道路(可以由多条公路连成一条道路)
输入格式
第11行两个正整数N,MN,M
下面MM行,每行33个正整数x, y, tx,y,t,告诉你这条公路连着x,yx,y两个村庄,在时间t时能修复完成这条公路。
输出格式
如果全部公路修复完毕仍然存在两个村庄无法通车,则输出-1−1,否则输出最早什么时候任意两个村庄能够通车。
输入输出样例
- 4 4
- 1 2 6
- 1 3 4
- 1 4 5
- 4 2 3
- 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的更多相关文章
- 算法手记 之 数据结构(并查集详解)(POJ1703)
<ACM/ICPC算法训练教程>读书笔记-这一次补上并查集的部分.将对并查集的思想进行详细阐述,并附上本人AC掉POJ1703的Code. 在一些有N个元素的集合应用问题中,通常会将每个元 ...
- ACM数据结构-并查集
ACM数据结构-并查集 并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合 ...
- 洛谷 - P1111 - 修复公路 - 并查集
https://www.luogu.org/problemnew/solution/P1111 并查集的水题,水题都错了好多发. 首先并不是有环就退出,而是连通分支为1才退出,每次合并成功连通分支才会 ...
- 洛谷 P1111 修复公路——并查集
先上一波链接qwq https://www.luogu.org/problem/P1111 这题就是裸的并查集咯qwq 维护一下连通块的数目 数目变为一的时候整个图就连通了 输出此时的答案就okay拉 ...
- 洛谷 P1111 修复公路 Label:并查集
题目背景 A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 题目描述 给出A地区的村庄数N,和公路数M,公路是双向的.并告诉你每条公路的连着哪两个村庄,并告诉你什么时 ...
- 洛谷P1111修复公路并查集改
看了他们的题解感觉很震惊,为什么要用kruskal,这题要用到最小生成树吗??? 38行短短的程序就可以了,我觉得学习不是一种套用,套自己学的,而且题解很大一部分都是kruskal. 个人认为自己的程 ...
- The Suspects 简单的并查集
Description 严重急性呼吸系统综合症( SARS), 一种原因不明的非典型性肺炎,从2003年3月中旬开始被认为是全球威胁.为了减少传播给别人的机会, 最好的策略是隔离可能的患者. 在Not ...
- The Suspects(简单的并查集)
Description Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, wa ...
- 《挑战程序设计竞赛》2.4 数据结构-并查集 POJ1182 2236 1703 AOJ2170
POJ1182 http://poj.org/problem?id=1182 题目 难得的中文题... 食物链 Time Limit: 1000MS Memory Limit: 10000K Tota ...
随机推荐
- Ubuntu上安装gevent
安装libevent; 安装greenlet: sudo easy_install gevent (need net access) bingo! -> python-dev -> lib ...
- tomcat及springboot实现Filter、Servlet、Listener
tomcat实现: 核心类org.apache.catalina.startup.ContextConfig //支持注解 see:org.apache.catalina.deploy.WebXml ...
- Java基础技术基础面试【笔记】
Java基础技术基础面试[笔记] String.StringBuilder以及StringBuffer三者之间的区别? 三者的区别可以从可变性,线程安全性,性能这三个部分进行说明 可变性 从可变性来说 ...
- Mysql报错注入之floor报错详解
一.简述 利用 select count(*),(floor(rand(0)*2))x from table group by x,导致数据库报错,通过 concat 函数,连接注入语句与 floor ...
- DVWA靶场之File Inclusion(文件包含)通关
文件包含,未经过严格过滤,将一些恶意构造带入了包含函数,可以使用一些包含函数来包含一些其他乱七八糟的东西,要么导致任意文件读取,要么命令执行 文件包含包括远程文件包含(RFI)和本地文件包含(LFI) ...
- Sqli-Labs less38-45
less-38 前置基础知识:堆叠注入 参考链接:https://www.cnblogs.com/lcamry/p/5762905.html 实际上就是多条sql语句一起使用. 在38关源码中加入输出 ...
- noip12
T1 类似于昨天的t3,先用单调栈求出管控区间,然后暴力求解30pts 我没取模还没开longlong,然后就爆0了 正解: 仍然是用单调栈求一下区间,用线段树维护一下余数,对于i所对应的区间\([l ...
- Sadmin:打造私有Django公共库实现代码复用
我们借助于Django开发了许多的内部管理系统,例如之前介绍过的Probius.Kerrigan.Proxy等等,这些系统看起来长的都一样,但实际实现的功能确是千差万别,这些不同的系统为什么会长的一样 ...
- .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& ...
- 【spring 注解驱动开发】spring ioc 原理
尚学堂spring 注解驱动开发学习笔记之 - Spring容器创建 Spring容器创建 1.Spring容器创建-BeanFactory预准备 2.Spring容器创建-执行BeanFactory ...