题意:
有S1到Sn这n个勇士要和X1到Xn这n个勇士决斗,初始时,Si的决斗对象是Xi. 如果Si赢了Xi,那么你将获得Vi分,否则你将获得-Vi分. Si和Xi对决时,Si有初始生命Hi,初始攻击Ai, Xi有初始生命Pi,初始攻击Bi. 且Si先出手,然后Xi失去Ai生命,之后如果Xi没死,那么Xi出手,Si失去Bi生命. 直到有一方的生命值<=0时,决斗结束.
现在要你重新安排S和X的决斗顺序,使得你能获得的分最多.如果有多个最优解,你要选取那个维持初始决斗顺序最多的解.
解析:
仔细看题 是不是攻击力和血量 除了确定连接关系外 并无用处 又因为边有权值 且 每个只能用一次 那么自然而然想到 KM 或 费用流
这里是用费用流做的
费用流是求最小 这里求最大 所以 取反即可
那怎么求出没有改变顺序的勇士
想一下求最小割集的做法
如果 i == j 建立费用为 -w * (n - 1) - 1的边 - 1 表示没有改变顺序
否则 建立费用为 w * (n - 1) 的边
容量都为1
那么 最后求出的最小费用 取反之后是不是就是最大的分数 设为value
那么value / (n + 1)是不是就是实际的分数 value % (n + 1) 是不是就是没有改变顺序的勇士 仔细想一想
还有%一定要 %% 不然超时。。。emm。。。
#include #include #include #include #include