OldBridges
作者:陈通
关键词:网络流
试题来源
Topcoder SRM 556 Div1 1000
试题大意
有一个包含个点的图,点的编号分别为到。有若干双向边连接两个点,有些边可以经过无限次,有些边最多只能经过(双向)两次。Alice计划从到进行次往返旅行(一次往返旅行即从到,在从回到)。与此同时,Bob也计划从到进行次往返旅行。请问是否存在一种方案,使得同时满足两人的计划。
,
算法介绍
算法一
可以发现由于所有的边均为双向边,所以对于一次往返旅行,可以拆成2条到的路径。
首先考虑只有一个人(Alice)的情况。可以使用网络流求解。对于可无限经过的边,即在两点建立容量均为正无穷的正向和反向边;对于最多经过两次的边,即在两点建立容量均为的正向和反向边。从到求出最大流,判断最大流量与的大小关系。但我们发现直接将两个人独立的可行方案直接叠加,是不能判断两人同时旅行的可行性的。
我们设从到的最大流(源点分别向和连容量为和的边,和向汇点连容量为和的边)为,从到的最大流为。由于每条边的容量均为偶数(或正无穷),可知最大流中每一条边的流量均为偶数。令,(两个网络流的叠加即将每条边的流量叠加)。可知为从到的最大流,为从到的最大流。
易知,若存在可行方案,的流量与的流量均等于。而若的流量与的流量均等于,对于每一条边,。即为可行的方案。
所以的流量与的流量均大于等于,为存在可行方案的充分必要条件。