Processing math: 100%

[BZOJ 1061][NOI2008]志愿者招募

膜了一发BYVoid的题解……竟然搞懂了

这首先是个非常简单的线性规划,就是有若干限制(每天要求的志愿者),形如:

Pi=Xa+Xb++XcAi

(这里用Xi表示第i类志愿者雇佣了多少个,Pi表示第i天的志愿者总数,Ai同原题面)

且最小化总费用。

既然我们我知道PiAi,那么说明Pi一定可以表示为Ai+YiYi0)。然后这样限制就变成了:

Pi=Xa+Xb++Xc+Yi=Ai

这个长得很像可以流量平衡的样子,但是流量的变动是表示不了的……

然后假设P0=0Pn+1=0,这样就可以对限制差分一下,我们就有了n+1个限制,然后这个式子就可以流量平衡做了(因为不考虑常数项的话,同一变量只可能在两个限制中出现,并且一正一负,这样就可以通过一个限制送给另一个限制流量来表示了。至于常数项,通过源或者汇连边即可表达)。

然后由于志愿者无限,所以这个东西也一定有解……

我局的我这么渣各位看官看懂的可能性基本上是零……还是推荐BYVoid神犇的题解,比我透彻多了。

代码:

[BZOJ 3171][TJOI2013]循环格

流量平衡入门中……

我竟然想民白了……

这个题就是要求每个点在且仅在一个环中,这样每个点的入、出度都是1。出度肯定是1,接下来我们想想怎么保证入度为1。

我们建两排点(也可以说是拆点?),一排表示流出,一排表示接受。然后流出点向相邻的接收点连边,费用的话考虑是否和原来这一格的方向不一样就行了。

这个不需要判断是否满流啥的……因为一定有解(比如说每个行构成一个环啥的)。

代码: