P1111 修复公路(并查集)
https://www.luogu.org/problem/P1111
题目背景
AA地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车。政府派人修复这些公路。
题目描述
给出A地区的村庄数NN,和公路数MM,公路是双向的。并告诉你每条公路的连着哪两个村庄,并告诉你什么时候能修完这条公路。问最早什么时候任意两个村庄能够通车,即最早什么时候任意两条村庄都存在至少一条修复完成的道路(可以由多条公路连成一条道路)
输入格式
第1行两个正整数N,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≤1000,M≤100000
x≤N,y≤N,t≤100000
/*
先根据时间先后排个序。
用cnt记录一家人的个数,如果人数到n,那就可以输出答案了
此时的cnt计数部分,
if(cnt[fx] < cnt[fy]) //儿孙多的当祖先{pre[fx] = pre[fy];//说明一下,此时,只是fx这个集合的老大指向了fy集合的根,下面也同理cnt[fy] += cnt[fx];}else{pre[fy] = pre[fx];cnt[fx] += cnt[fy];```
并不一定能让原本两个集合的人都指向同一个根,
(之前我这里的pre合并有误区,后来训练赛上,
因为这题我pre合并有误区
我用了相同方法,
但是此时正是要用到pre的每个值,误区使我WA,现在明白了,这题也记录一下)
*/```c
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
const int MAXN = 1e5 + 5;
struct Edge
{int u,v;int t;bool operator <(const Edge &x)const{return t < x.t;}
} a[MAXN];
int pre[MAXN];
int cnt[MAXN];
int n,m;
int myFind(int x)
{if(pre[x] == x){return x;}return pre[x] = myFind(pre[x]);
}
int myMerge(int pos)
{int fx = myFind(a[pos].u);int fy = myFind(a[pos].v);if(fx != fy){if(cnt[fx] < cnt[fy]) //儿孙多的当祖先{pre[fx] = pre[fy];//说明一下,此时,只是fx这个集合的老大指向了fy集合的根,下面也同理cnt[fy] += cnt[fx];}else{pre[fy] = pre[fx];cnt[fx] += cnt[fy];}if(cnt[fx] == n || cnt[fy] == n){return 1;}}return 0;
}
int main()
{cin>>n>>m;for(int i = 1; i <= n; i++){pre[i] = i;cnt[i] = 1;}for(int i = 0; i < m; i++){cin>>a[i].u>>a[i].v>>a[i].t;}sort(a,a+m);int flag = 0;for(int i = 0; i < m; i++){if(myMerge(i)){cout<<a[i].t<<endl;flag = 1;break;}}if(!flag) cout<<"-1"<<endl;return 0;
}
P1111 修复公路(并查集)相关推荐
- 洛谷 - P1111 - 修复公路 - 并查集
https://www.luogu.org/problemnew/solution/P1111 并查集的水题,水题都错了好多发. 首先并不是有环就退出,而是连通分支为1才退出,每次合并成功连通分支才会 ...
- P1111 修复公路P1195 口袋的天空
目录 P1111 修复公路 P1195 口袋的天空 P1111 修复公路 题目链接:https://www.luogu.com.cn/problem/P1111 标签:并查集,最小生成树 思路:本题用 ...
- 【洛谷】P1111 修复公路
题目背景 A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 题目描述 给出A地区的村庄数N,和公路数M,公路是双向的.并告诉你每条公路的连着哪两个村庄,并告诉你什么时 ...
- 【题解】luogu p1111 修复公路
并查集 总结: 1.并查集板子掌握不熟练 #include<bits/stdc++.h> using namespace std; int n, m, fa[1005], t, sum[1 ...
- 洛谷 P1111 修复公路(最小生成树)
嗯... 题目链接:https://www.luogu.org/problemnew/show/P1111 这道题的关键是读懂题: 首先根据题中的一些扎眼的字眼我们可以判断这是一道用最小生成树来做的题 ...
- P1111 修复公路
题目背景 A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车. 政府派人修复这些公路. 题目描述 给出A地区的村庄数N,和公路数M,公路是双向的. 并告诉你每条公路的连着哪两个村庄,并告诉你什 ...
- P1111 修复公路 (prim)
题目背景 A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 题目描述 给出A地区的村庄数N,和公路数M,公路是双向的.并告诉你每条公路的连着哪两个村庄,并告诉你什么时 ...
- [LUOGU] P1111 修复公路
题目背景A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路.题目描述给出A地区的村庄数N,和公路数M,公路是双向的.并告诉你每条公路的连着哪两个村庄,并告诉你什么时候能修 ...
- [并查集][最小生成树]PJOJ 2560 雀斑连线/luogu 2921 修复公路
题目描述 In an episode of the Dick Van Dyke show, little Richie connects the freckles on his Dad's back ...
最新文章
- rocketmq安装,内存配置,各种命令说明,windows下安装,控制台工具
- php7插件开发,php7.2.6 插件fileinfo的安装
- 138.括号序列(区间型DP)
- 护航Lazada双11购物节 阿里云CDN全球化火力全开
- android insmod命令,android的启动脚本(init.rc)文件的语法
- 信息学奥赛一本通 1011:甲流疫情死亡率 | OpenJudge NOI 1.3 06
- c 语言中 %是什么运算符,C 语言基础----详解C中的运算符
- 【英语学习】【Daily English】U07 Restaurant L04 It's on me today.
- android AChartEnginee讲解之自定义图表类
- 蠕虫Sexy View短信攻击诺基亚3250等手机
- Python学习笔记 之 函数进阶
- sudo和su命令简介
- 全球异常高温:虾熟了我也要“熟”了
- bochs linux使用教程,bochs 在linux下的安装
- PCB布线规则自学笔记
- xshell通过隧道连接_如何通过SSH隧道实现远程连接
- spring-05 AOP
- 1236: 数的逆转
- 基于FPGA的数字交通红绿灯Verilog开发Modelsim仿真
- PL/SQL用户指南与参考(第一章)
热门文章
- 手机电脑的芯片主要是由_苹果的自研电脑芯片终于来了!你看好么?
- qpython3可视图形界面_python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法...
- mysql写入数据乱码问题的解决
- linux sdk 窗口句柄,Venus: 针对Linux平台上,对常用的系统API进行面向对象的封装SDK。...
- 天津大学计算机学院院长及副院长,李晓红 教授
- android的单选按钮xml语法,android-通过数组而不是xml布局中的单独字符串设置单选按钮组中单选按钮的文本...
- 光储充一体化充电站_福建全省首座光储充一体化公交充电站投入使用
- tictoc正方形网络模型_反卷积:可视化并理解卷积网络
- mfc 隐藏主窗口 visible_第80讲:工作表数据与UserForm窗口的交互,记录的编辑和保存...
- 机器学习:使用numpy实现数据增强(Data Augmentation)