有一个ACM问题,我很难解决。如果有人能告诉我如何处理它?我真的很感激!
描述
要向主显示你的智慧,你必须按如下方式解决问题: 假设有m个人和n个动物。如果动物喜欢动物,则可以和平地喂养动物。 给出一个哪个人喜欢哪个动物的清单,你要确定是否可以和平地喂养所有动物 条件是每个人都可以喂养最多k只动物。
输入
将会有多个测试用例。对于每个测试用例,第一行包含两个整数m(1 <= m <= 100)和n(1 <= n <= 100),其中m表示人数,n表示数量动物。以下行包含m * n 0-1矩阵,表示哪个人喜欢哪个动物。如果第i行的第j个元素为1,则第j个动物喜欢第i个人。每个测试用例的最后一行包含一个整数k,表示一个人可以喂食的最大动物数。
输出
对于每个测试用例,如果所有动物都可以和平喂食则输出“是”,否则输出“否”。
样本输入
2 8 1 1 0 1 0 0 1 1 1 1 1 0 1 1 1 1 2 7 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2
样本输出
No Yes
答案 0 :(得分:2)
可以使用 max-flow problem 解决此问题。
创建以下图表:
vertices:
V={s,t} U {persons} U {animals}
edges:
E = { (s,p) | for each p in persons } U
U {(p,a) | for each person liked by each animal} U
U {(a,t) | for each a in animal }
weight function on edges:
w(s,p) = k | for each p in person
w(p,a) = 1 for each p in persons and a in animals
w(a,t) = 1 for
graph:
G = (V,E,w)
现在,您需要在s
上找到从t
到G
的最大整数流。这可以使用各种算法来解决,例如Ford-Fulkerson
达到t
的流量是喂食的动物数量,解决方案本身由流量给出:
(p,a)
上有一个流量(权重为1),那么p
人就会为动物a
提供动物。k
只动物,因为可以触及某人p
的最大流量为k
,因此k
不能超过p
{{1}} }}。