题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=4975
题意:
现有一个n * m的矩阵,矩阵的每个元素都是0~9之间的一个个位数。
给出矩阵每一行和每一列的和。
求能否构建出这个矩阵以及解的唯一性。
算法:
典型的网络流问题。
把每一行、每一列都当做一个点。
由源点向每一行连一条边,容量为这一行的和。
由每一列向汇点连一条边,容量为这一列的和。
由每一行向每一列连一条边,容量为9:
这条边的流量就代表这一行和这一列交叉处的这个元素的大小,容量限制了这个元素在0~9之间。
最后如果所有由源点流出的边都满流且所有流向汇点的边也满流,即为有解。
判断解的唯一性即判断最大流的唯一性,充要条件为残余网络中没有长度大于2的环,可以用类似tarjan的dfs来判断。
代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include