【CQOI2014】危桥
来源:互联网 发布:sp版羽毛球拍淘宝店 编辑:程序博客网 时间:2024/06/11 21:08
【CQOI2014】危桥
【题目描述】
Alice和Bob居住在一个由N座岛屿组成的国家,岛屿被编号为0到N-1。某些岛屿之间有桥相连,桥上的道路是双向的,但一次只能供一人通行。其中一些桥由于年久失修成为危桥,最多只能通行两次。
Alice希望在岛屿a1和a2之间往返an次(从a1到a2再从a2到a1算一次往返)。同时,Bob希望在岛屿b1和b2之间往返bn次。这个过程中,所有危桥最多通行两次,其余的桥可以无限次通行。请问Alice和Bob能完成他们的愿望吗?
【输入】
本题有多组测试数据。
每组数据第一行包含7个空格隔开的整数,分别为N、a1、a2、an、b1、b2、bn。
接下来是一个N行N列的对称矩阵,由大写字母组成。矩阵的i行j列描述编号i-1和j-1的岛屿间连接情况,若为“O”则表示有危桥相连;为N表示有普通桥相连;为“X”表示没有桥相连。
【输出】
对于每组测试数据输出一行,如果他们都能完成愿望输出“Yes”,否则输出“No”。
【输入样例】
4 0 1 1 2 3 1
XOXX
OXOX
XOXO
XXOX
4 0 2 1 1 3 2
XNXO
NXOX
XOXO
OXOX
【输出样例】
Yes
No
【数据范围】
4≤N≤50
0≤a1,a2,b1,b2≤N-1
1≤an,bn≤50
【题解】
一遍AC= =听说CQOI现场只有1人AC?
不难想到使用网络流建图,虚拟一个源点与两人起点相连,再虚拟一个汇点与两人终点相连,危桥流量为2,其他桥流量为INF,然后跑一遍最大流,若最大流大于两人往返次数和的两倍,则可以实现。
很遗憾,这样是错的o(>﹏<)o可以自己YY一下,这样的做法能保证Alice跑过的一定是Alice希望的路吗?换句话说,即使最大流跑了出来,也许找到的路径其中一部分两个人换了位,并不符合题意啊。仔细想了想,这个问题可以这样解决:两遍最大流,第一次源点连接Alice的起点和Bob的起点,第二次源点连接Alice的起点和Bob的终点,如果这样两次的最大流都大于两人往返次数和的两倍,就一定可行。
实际上,我们应该有四次最大流才能保证答案的正确,但由于是双向道路,所以只需两次即可。我们跑的这两次最大流可以这么想:第一次从Alice起点放出an个Alice分身,从Bob起点放出bn个Bob分身,第二次从Alice起点放出an个Alice分身,从Bob终点放出bn个Bob分身,如果均能到达相应的起点(终点),才证明这样的方案是可行的。
因为我太弱了,而且这题是这几天才出来的,所以给出严格证明不大可能了QAQ数据出来后翻了一下,找到这样一组:
6 0 5 3 1 4 2
XXOOXO
XXXNOO
OXXXOX
ONXXXO
XOOXXO
OOXOOX
这组数据两次最大流结果不一样,我手工模拟了一下,如果源点都连起点,那么Alice有一条路从Bob终点出去,Bob有一条路从Alice终点出去。我又试了试只跑第二次最大流,结果WA,证明我YY的思路应该是没错的~
【代码】
Dinic+当前弧优化,还有一个优化不知是不是传说中的弹栈= =
【CQOI2014】危桥#代码
0 0
- 【CQOI2014】危桥
- bzoj 3504 [Cqoi2014] 危桥
- bzoj3504[Cqoi2014]危桥
- 【bzoj 3504】: [Cqoi2014]危桥
- bzoj3504 [Cqoi2014]危桥
- 【BZOJ 3504】 [Cqoi2014]危桥
- bzoj3504: [Cqoi2014]危桥
- 【BZOJ 3504 】[Cqoi2014]危桥
- bzoj 3504: [Cqoi2014]危桥
- bzoj3504【CQOI2014】危桥
- 3504: [Cqoi2014]危桥
- BZOJ 3504: [Cqoi2014]危桥
- bzoj3504 [Cqoi2014]危桥
- BZOJ P3504[Cqoi2014]危桥
- 3504: [Cqoi2014]危桥
- 3504: [Cqoi2014]危桥
- 3504: [Cqoi2014]危桥
- BZOJ3504: [Cqoi2014]危桥
- string json 相互转换
- 服务器第三方ios推送方式
- 004_013 Python 获取一个字典的子集
- wustoj1284Gold Medal(三进制思想)
- linux单机上安装hadoop
- 【CQOI2014】危桥
- 只运行一个实例进程的方法
- 微软过桥问题与测试人员素养
- VB获取时间
- Web: html_entity_decode、空格 以及乱码
- iOS 正则表达式
- 算法 把一个字符串数组 按照从中间开始然后左侧一个右侧一个的方式输出
- 004_014 Python 反转字典 即key和val互换
- woj 1537 Stones I