PKU 3422 &&PKU 2135 &&ZJU 3308

来源:互联网 发布:彩票中奖知乎 编辑:程序博客网 时间:2024/06/05 09:50

三题属于同一类型的题,即最小费用流问题。。

PKU http://acm.pku.edu.cn/JudgeOnline/problem?id=3422

题意:给定一个矩阵,从[1][1]—>[n][n]走k次所能得到的最大值;

建图:把一个点Q,val[i][j]拆成两个点,Q`,它们之间连线,流量为1,费用为val[i][j];

        Q`与右边和下边的两个点连线构图,然后增加一个超级源点s,超级汇点t,连s->0,Q`(val[i][j])—>t,流量为k,费用为0;

也可以视为控制增光次数的费用流。。。

代码:

 

PKU http://acm.pku.edu.cn/JudgeOnline/problem?id=2135

题意:给定一个无向图,设1为起点,n为终点,求从1到n然后从n返回1的一个最小环,并且每次不能走重复边;

很显然这是球一个最小环,节点数之多,用Floyed是求最小环是不明智的,那么可以视为费用流的问题解决;

建图:把每个点拆成两点建成有向图,然后增加一个超级源点s,和一个超级汇点t,s连接1,流量为2,费用为0,n连接t流量为2费用为0;

代码:

 

 

ZJU http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3308

题意:国际象棋中,棋盘是黑白相间的格子组成,有些黑色格子上有金骑士,银骑士,铜骑士,每个骑士的走法和中国象棋的马走法一样,但是每个骑士的移动会消耗能量,金骑士移动一下消耗的能量为两个格子能量的最大值,银骑士消耗的能量为最格子能量的和,而铜骑士消耗的能量为两个能量的乘积,并且每个骑士最多可以移动一次,每个格子上最多只能有一个骑士,问:

能不能找到这样的一种是消耗能量最少的方法,要是能找到输出最小值;

要是不能输出“-1”;

黑白色建图;增加一源点s,汇点t,超级源点ss,超级汇点tt,ss->s,t->tt,流量为k,费用为0;

代码: