洛谷1111 修复公路
2015-07-20 15:53
176 查看
洛谷1111 修复公路
本题地址: http://www.luogu.org/problem/show?pid=1111
题目背景
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
题解:
洛谷1111 修复公路
本题地址: http://www.luogu.org/problem/show?pid=1111
题目背景
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
题解:
简单的并查集问题,我在洛谷的试炼场第一题。
思路有点类似最小生成树kruskal算法只需要把所有边按照时间从小到大排序(即修路的顺序)
用sum记录当前有多少个连通图(初始为n),当只有一个连通图时任意两个村庄能够通车,输出即可
至于判定连通图,是经典并查集
本题地址: http://www.luogu.org/problem/show?pid=1111
题目背景
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
题解:
洛谷1111 修复公路
本题地址: http://www.luogu.org/problem/show?pid=1111
题目背景
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
题解:
简单的并查集问题,我在洛谷的试炼场第一题。
思路有点类似最小生成树kruskal算法只需要把所有边按照时间从小到大排序(即修路的顺序)
用sum记录当前有多少个连通图(初始为n),当只有一个连通图时任意两个村庄能够通车,输出即可
至于判定连通图,是经典并查集
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; const int maxm=100010, maxn=1010; struct Edge{ int u, v, t; bool operator < (const Edge &rhs) const{ return t<rhs.t; } }e[maxm]; int fa[maxn]; int find(int x){ return fa[x] = (fa[x]==x) ? x : find(fa[x]); } int main() { int n, m; scanf("%d%d", &n, &m); for (int i=1; i<=m; i++) scanf("%d%d%d", &e[i].u, &e[i].v, &e[i].t); sort(e+1, e+1+m); int sum=n; for (int i=1; i<=n; i++) fa[i]=i; int ans=-1; for (int i=1; i<=m; i++) { int fx=find(e[i].u), fy=find(e[i].v); if (fx!=fy){ fa[fy]=fx; sum--; if (sum==1) {ans=e[i].t; break;} } } printf("%d", ans); return 0; }
相关文章推荐
- 常见面试第三题之Activity的几种启动模式介绍
- tomcat自动切割日志(Windows)
- 编写一个求n个数的平均值及最小值的程序。要求:程序执行时,用户先由键盘输入n的值,之后输入n个数,最后,程序显示平均值和最小值。
- sublime 多行同时编辑快捷键
- mysql insert语法注意事项(ON DUPLICATE KEY UPDATE )
- test.
- jdk环境变量设置
- 4Sum
- 重寫一下js的alert函數
- High ASCII字符从bat文件到dos控制台的转化问题
- 多年后,才知道自己是多么的无知 !
- Linux学习问题记录{}{}{}{}{}{}
- jquery ajax协调SpringMVCD实现局部刷新IV
- RMAN的show,list,crosscheck,delete命令
- python 读取配置文件
- github命令备忘录
- 奔跑中的2015 — 提剑的少年
- VS2008下编译生成exe的设置
- javascript调用android代码
- shell编程LANMP一键安装脚本