博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷P1111 修复公路
阅读量:4942 次
发布时间:2019-06-11

本文共 982 字,大约阅读时间需要 3 分钟。

最近并查集有点上瘾,下午来道黄题提神醒脑()

题目

 

试题描述
A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车。政府派人修复这些公路。
给出A地区的村庄数
N,和公路数M,公路是双向的。并告诉你每条公路的连着哪两个村庄,并告诉你什么时候能修完这条公路。问最早什么时候任意两个村庄能够通车,即最早什么时候任意两条村庄都存在至少一条修复完成的道路(可以由多条公路连成一条道路)
输入

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

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

输出
如果全部公路修复完毕仍然存在两个村庄无法通车,则输出
-11,否则输出最早什么时候任意两个村庄能够通车。
输入示例
4 4
1 2 6
1 3 4
1 4 5
4 2 3
输出示例
5
其他说明

N1000,M100000

x≤N,y≤N,t100000

分析

很显然,这是道并查集(不会并查集看:)。如何模拟修路循序很重要,如果直接循环枚举时间,很容易T掉。所以我们要定义一个结构体,接着直接排序修路时间(结构体排序:),然后循环m次。每次使两个集合合并,再判断所有元素是否处于同一集合。如果是,输出这次合并所用时间(前面所有次修路在这次时间以内)然后直接return 0,否则继续循环。出了循环说明程序没有结束,于是输出-1。 代码如下。

#include 
using namespace std;struct bcj{ int b,e,t; //b,e表示路,t表示时间。 }a[100005];int n,m,fa[1005];bool cmp(bcj x,bcj y) //按t从小到大排序。 { return x.t
>n>>m; for(int i=1;i<=m;i++) cin>>a[i].b>>a[i].e>>a[i].t; sort(a+1,a+m+1,cmp); //排序 init(); //for(int i=1;i<=m;i++) cout<
<

  

 

转载于:https://www.cnblogs.com/zxjhaha/p/11314878.html

你可能感兴趣的文章
【NOIP2015】斗地主
查看>>
uva 10537 Toll! Revisited(优先队列优化dijstra及变形)
查看>>
MySQL对时间的处理总结
查看>>
笔记四:python乱码深度剖析二
查看>>
《PHP程序员面试笔试宝典》——如何回答技术性的问题?
查看>>
【转载】Amit’s A star Page 中译文
查看>>
注册谷歌账号并验证时显示号码无法用于验证的问题
查看>>
Hive 变量和属性
查看>>
Python安装第三方库 xlrd 和 xlwt 。处理Excel表格
查看>>
课后作业-阅读任务-阅读提问-3
查看>>
Asp.Net Core 中利用QuartzHostedService 实现 Quartz 注入依赖 (DI)
查看>>
细说sqlserver索引及SQL性能优化原则
查看>>
一般数据库增量数据处理和数据仓库增量数据处理的几种策略
查看>>
centos6.5适用的国内yum源:网易、搜狐
查看>>
视频直播技术(三):低延时直播经验总结
查看>>
Application failed to start because it could not find or load the QT platform plugin “windows”
查看>>
python合并多表或两表数据
查看>>
第一个python作业题目以及代码
查看>>
Windows Azure 社区新闻综述(#71 版)
查看>>
Windows XP 的最高版本 .net framework 安装
查看>>