[NOI2008] 志愿者招募

Algo.1 感性的费用流

我们考虑至少 \(a_i\) 是不好做的,考虑转化成最多有 \(INF-a_i\) 个人摆烂。

\(S\) 开始向 \(1\)\(INF\) 边代表一开始有无穷个人在摆烂,第 \(i\) 天要有 \(a_i\) 个人干活就是说至多有 \(INF-a_i\) 人摆烂,由 \(i\rightarrow i+1\) 连边即可。

考虑每一类志愿者,他们在 \(s_i\) 时刻停止摆烂在 \(t_i + 1\) 时刻回来继续摆烂,连一条 \((s_i,t_i+1,INF,c_i)\) 的边即可。

最后有解一定是满流。

Algo.2 线性规划角度

显然我们可以把这个问题写成一个线性规划的形式。

可以考虑使用单纯形算法。

Algo.3 凑费用流

由于单纯形算法追求一般性而忽略了图的特殊性质,倘若我们发现这些性质使用更局限的费用流来解决,就可以得到更优的做法。

考虑费用流的限制当中,每一条边所对应的流量分别在起点和终点对应的流量平衡条件中出现了两次,且一正一负。考虑把原限制转化成这种形式再建图。

首先原限制是不等式的形式,我们可以在一边加上非负变量 \(t_i\) 将其转化成等式。

接着要求变量一正一负出现两次,我们可以进行一个差分。

然后怼一下硬搞成一个费用流图就可以了。

posted @ 2023-03-07 08:32  PYD1  阅读(24)  评论(0)    收藏  举报