BZOJ 2039 人员雇佣 二元关系 最小割

时间:2020-12-31 18:37:41

题面太长了,请各位自行品尝—>人员雇佣

分析:

  借用题解的描述:

 a.选择每个人有一个代价Ai

 b.如果有两个人同时选择就可以获得收益Ei,j

 c.如果一个人选择另一个不选会产生代价Ei,j

  这是一道模型题(不是模板题是模型题)我们要记住这种建模。

  之前说过,最小割问题关键在于“舍弃”,所以说我们这个也是,要么舍弃Eij,要么舍弃Ai,Aj,要么舍弃完某个A还得付出Eij的代价。

  这里直接给出建图方法。

  首先,我们从原点向每个人i连边,容量为Σ(Eij)(1<=j<=n),表示选这个人最多带来的价值。

  然后,从每个人向T连容量为Ai的边,表示选这个人的代价。

  我们可以看到,现在我们的图是不对劲的,而且也不满足C条件,那么我们应该怎么动一下手脚呢?

  一个方法是,如果选了i不选j有Eij的代价,那么我们从i向j连接一条容量为2*Eij的边。这样的话如果我们选择了i而特别不想选j那么这条边也会被割掉,虽然在i的贡献中我们曾把Eij加入贡献,但这里减掉了,而且减掉了两次,即付出了相应的代价。

  至此,我们用总价值减去最小割,就是最终的答案。

代码:

  这道题我乱调了调在BZOJ上过了,但在洛谷上说什么也过不去……代码就不发了。