Codeforces 601A:The Two Routes 宽搜最短路径
2 seconds
256 megabytes
standard input
standard output
In Absurdistan, there are n towns (numbered 1 through n)
and m bidirectional railways. There is also an absurdly simple road network — for each pair of different towns x and y,
there is a bidirectional road between towns x and y if
and only if there is no railway between them. Travelling to a different town using one railway or one road always takes exactly one hour.
A train and a bus leave town 1 at the same time. They both have the same destination, town n,
and don't make any stops on the way (but they can wait in town n). The train can move only along railways and the bus can move only
along roads.
You've been asked to plan out routes for the vehicles; each route can use any road/railway multiple times. One of the most important aspects to consider is safety — in order to avoid accidents at railway crossings, the train and the bus must not arrive at the
same town (except town n) simultaneously.
Under these constraints, what is the minimum number of hours needed for both vehicles to reach town n (the maximum of arrival times
of the bus and the train)? Note, that bus and train are not required to arrive to the town n at the same moment of time, but are allowed
to do so.
The first line of the input contains two integers n and m (2 ≤ n ≤ 400, 0 ≤ m ≤ n(n - 1) / 2) —
the number of towns and the number of railways respectively.
Each of the next m lines contains two integers u and v,
denoting a railway between towns u and v (1 ≤ u, v ≤ n, u ≠ v).
You may assume that there is at most one railway connecting any two towns.
Output one integer — the smallest possible time of the later vehicle's arrival in town n. If it's impossible for at least one of the
vehicles to reach town n, output - 1.
4 2
1 3
3 4
2
4 6
1 2
1 3
1 4
2 3
2 4
3 4
-1
5 5
4 2
3 5
4 5
5 1
1 2
3
In the first sample, the train can take the route
and
the bus can take the route
.
Note that they can arrive at town 4 at the same time.
In the second sample, Absurdistan is ruled by railwaymen. There are no roads, so there's no way for the bus to reach town 4.
题意是有n个点,m条火车道,每一条火车道连接着两个点,没有火车道的边 有客车路,问火车与客车同时从1点出发,两者最终到达n点时,时间最长的那个的最小值。
我算是见识了codeforces水题 唬人的功力了。。。
比赛的时候太困了。。。。搞完AB就一直想睡觉,读了一遍C之后发现要求除了终点之外每个点火车与客车到达时间不能相等。心想这怎么搞,怎么C题就这么难了,睡觉吧。。。。
醒来发现,麻蛋全是骗人的。。。。。
这是一个完全图啊啊啊,点1到n必有路径的啊,也就是说火车与客车 两者到达时间的最小值一定是1,就求剩下的那个的最小值,就是答案了。。。。
对自己写代码能力也真是很伤心。。。
参考代码:
#pragma warning(disable:4996)
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#include <queue>
using namespace std; const int maxn = 405; int n, m;
int dis[maxn];
int connect[maxn][maxn]; int bfs(int val)
{
queue<int>q;
memset(dis, -1, sizeof(dis));
dis[1] = 0;
q.push(1); while (!q.empty())
{
int x = q.front();
q.pop(); for (int i = 1; i <= n; i++)
{
if (connect[x][i] == val&&dis[i] == -1)
{
dis[i] = dis[x] + 1;
q.push(i);
}
}
}
return dis[n];
} int main()
{
//freopen("i.txt", "r", stdin);
//freopen("o.txt", "w", stdout);
scanf("%d%d", &n, &m);
int tx, ty; for (int i = 0; i < m; i++)
{
scanf("%d%d", &tx, &ty);
connect[tx][ty] = connect[ty][tx] = 1;
}
printf("%d\n",bfs(1 - connect[1][n]));
//system("pause");
return 0;
}
Codeforces 601A:The Two Routes 宽搜最短路径的更多相关文章
- CodeForces - 601A The Two Routes
http://codeforces.com/problemset/problem/601/A 这道题没想过来, 有点脑筋急转弯的感觉了 本质上就是找最短路径 但是卡在不能重复走同一个点 ----> ...
- codeforces 601A The Two Routes(最短路 flody)
A. The Two Routes time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- ACM学习历程—CodeForces 601A The Two Routes(最短路)
题目链接:http://codeforces.com/problemset/problem/601/A 题目大意是有铁路和陆路两种路,而且两种方式走的交通工具不能在中途相遇. 此外,有铁路的地方肯定没 ...
- [ An Ac a Day ^_^ ] CodeForces 601A The Two Routes 最短路
14号就ccpc全国赛的全国赛了 而且也快东北赛的选拔赛了 现在队伍实力实在不行 参加了也是边缘化的队伍 虽然有新生保护的设置 但实话说 机会还是不大 所以不如趁现在开始好好努力 明年也许还有机会 A ...
- 【宽搜】ECNA 2015 D Rings (Codeforces GYM 100825)
题目链接: http://codeforces.com/gym/100825 题目大意: 给你一张N*N(N<=100)的图表示一个树桩,'T'为年轮,'.'为空,求每个'T'属于哪一圈年轮,空 ...
- 【宽搜】ECNA 2015 E Squawk Virus (Codeforces GYM 100825)
题目链接: http://codeforces.com/gym/100825 题目大意: N个点M条无向边,(N<=100,M<=N(N-1)/2),起始感染源S,时间T(T<10) ...
- 【宽搜】BAPC2014 J Jury Jeopardy (Codeforces GYM 100526)
题目链接: http://codeforces.com/gym/100526 http://acm.hunnu.edu.cn/online/?action=problem&type=show& ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 利用深搜和宽搜两种算法解决TreeView控件加载文件的问题。
利用TreeView控件加载文件,必须遍历处所有的文件和文件夹. 深搜算法用到了递归. using System; using System.Collections.Generic; using Sy ...
随机推荐
- Xcode 内存泄露检查出现:nil returned from a method that is expected to return a non-null value iOS 解决方案。
在 使用 Xcode 检查内存泄露时(cmd+shift+B)运行,出现了一个警告:nil returned from a method that is expected to return a no ...
- Anaconda"无法定位程序输入点 OPENSSL_sk_new_reserve 于动态链接库Anaconda3\Library\bin\libssl-1_1-x64.dll上"的解决办法
Anaconda"无法定位程序输入点 OPENSSL_sk_new_reserve 于动态链接库Anaconda3\Library\bin\libssl-1_1-x64.dll上" ...
- shell脚本入门笔记
转载:http://mp.weixin.qq.com/s?__biz=MzA3MTIxNzkyNg==&mid=204081791&idx=1&sn=27bb1d827e0f8 ...
- 熟悉这几道 Redis 高频面试题,面试不用愁
1.说说 Redis 都有哪些应用场景? 缓存:这应该是 Redis 最主要的功能了,也是大型网站必备机制,合理地使用缓存不仅可以加 快数据的访问速度,而且能够有效地降低后端数据源的压力. 共享Ses ...
- 排序算法之希尔排序的python实现
希尔排序(Shell’s Sort)是插入排序的一种,是直接插入排序算法的一种更高版本的改进版本. 希尔排序的工作原理 如下: (1)把记录按步长gap分组,对每组记录采用直接插入排序方法进行排序: ...
- [Python] Tkinter的食用方法_02_LabelFrame RadioButton CheckButton
#开始 Python的话 我是看的小甲鱼的视频 所以代码也是小甲鱼的修改版 本博客这里只是学习记录 小甲鱼是个很棒的老师,虽然经常飙车.... #第一个代码 from tkinter import * ...
- python中的分号(“;”)
在C.Java等语言的语法中规定,必须以分号作为语句结束的标识.Python也支持分号,同样用于一条语句的结束标识.但在Python中分号的作用已经不像C.Java中那么重要了,Python中的分号可 ...
- C语言:把分数最低的学生数据放入数组b所指的数组中,-从键盘输入若干字符串,写入文件myfile4中,用-1作字符输入结束的标志,
//学生记录由学号和成绩组成,N名学生的数据已放入主函数中的结构体数组中,fun函数:把分数最低的学生数据放入数组b所指的数组中,分数最低的学生可能不止一个.人数返回. #include <st ...
- 计算机基础,Python - Map和Reduce
例子1. python中实现hashable def __hash__(self): hashes = map(hash, self.components) return functools.redu ...
- Ubuntu系统中创建虚拟环境
1.虚拟环境产生的原因:如果在一台电脑上, 想开发多个不同的项目, 需要用到同一个包的不同版本, 如果使用上面的命令, 在同一个目录下安装或者更新, 新版本会覆盖以前的版本, 其它的项目就无法运行了. ...