【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
考虑直接将源点连到a1,b1,将a2,b2连到汇点,然后按题意连边之后直接跑最大流,如果最大流是$an+bn$那么可行。
但是这样做的问题在于可能存在$a1\rightarrow b2$,$b1\rightarrow a2$的流。
处理方法是再跑一次,将a1,a2交换后再做一次最大流,如果最大流也是$an+bn$那么就可行。
证明的话,考虑第二次跑的时候是不存在$a1\rightarrow b2$,$b1\rightarrow a2$的流的,这说明不要这两种流也是可以满足条件的,结合第一次跑的结果,即可保证一定可行。
代码:
1 |
|