【noip2022图论专项练习】——疯狂的基建

在Mars上,你负责规划火车和公共汽车的路线,以避免它们在城镇相遇造成事故。给定城镇数量、铁路数量及铁路连接信息,目标是找出使两者到达最后一个城镇时间差最小的方案。如果无法到达,输出-1。解决方案涉及图论,求解火车沿铁路和汽车沿公路的最短路径。
摘要由CSDN通过智能技术生成

题目描述

你来到Mars上开疆扩土。

Mars上一共有个城镇,从到编号。Mars上还有条双向铁路,从到编号。

你是一个疯狂的基建爱好者。除了铁路网络,你还有一个公路网络。对于每一对不同的城镇和,和之间存在一条双向公路当且仅当它们之间没有铁路。从任意城镇出发,经过一条铁路/公路前往其他的城镇总是需要1小时。

一列火车和一辆公共汽车同时离开城镇。火车只能沿铁路行驶,公共汽车只能沿公路行驶。它们都有相同的目的地,即城镇,并且在途中不做任何停留,但可以在城镇等待。

你正在为火车和公共汽车规划路线。火车/公共汽车可以多次经过任何公路/铁路。你需要考虑的最重要方面之一是安全:为了避免在道路口发生事故,火车和公共汽车不得同时到达同一个城镇(城镇除外)。

在这些限制条件下,你需要求出两辆车到达城镇所需的最少小时数,即使得公共汽车和火车到达时间的较大值最小。请注意,公共汽车和火车不必同时到达城镇。

输入格式

输入的第一行包含两个整数和,分别是城镇的数量和铁路的数量。

接下来的行中的每一行包含两个整数和,表示城镇和之间存在一条双向铁路()。 任何两个城镇之间最多有一条铁路。

输出格式

输出一个整数,表示答案。 如果至少有一辆车辆不可能到达城镇,则输出-1。

i n p u t input input

4 2
1 3
3 4

o u t p u t output output

2

由题可知,在每两个城镇之间都会有一条道路。
铁路或者公路其中之一包括1到n这条边。
假如铁路包括1到n这条边,那么火车可以在1小时内到达城镇n。
所以只需要求汽车沿着公路从1到n的最短路。
只需要判断1-n之间是公路还是铁路,然后跑另一种路的最短路就可以了。

c o d e code code


#include<bits/stdc++.h>
using namespace std;
const int N=5e3+10;
int l[N],len,n,m,dis[10000],vis[10000],f,mp[N][N];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值