POJ - 2175 Evacuation Plan (网络流, SPFA 消去

栏目:影视资讯  时间:2022-10-29
手机版

  题意:有 N 栋大楼,M 个避难所,每个大楼里有 Bi 个人,每个避难所有 Ci 的容量,人去避难所避难,

  现在给你一个避难的计划,问你这个计划是不是最优的,如果不是最优的,那就找一个比这个优的方案,并输出来。

  思路:问的是,这个方案是不是最优的,如果不是,输出一个更优的,并不是输出最优的。

  我们要知道,最小费用最大流 等价于 跑完图之后,这个图没有 负环。

  所以这个题就可以看看?残余网络上 有没有负环,如果没有,那么就是最优的解,如果有负环,在负环上增广一下,那就是更优的解了。

  首先我们就要见残余网络的图。

  0? 源点

  1 ~ n 建筑物

  n + 1 ~ n + m? 避难所

  n + m + 1 汇点

  1、首先 人要去避难,, 建筑物 到? 避难所 要建一条权值为距离的边

  2、在给定的计划上,i 到 j 有人避难, 所以要建一条反向边, 权值为 负的。

  3、在 j 这个避难所,是不是有避难的人,如果有,建一条从? 汇点 到 j 的权值为 0 的边。

  为什么?我的想法是, 人可以从 j 走到汇点,然后就要再一条 反向边。

  如果 避难的人 没有超过当前避难所的容量,那就要建一条 从 避难所 到 汇点 的 权值 为 0 的边。

  为什么? 因为,还有人可以从避难所走到汇点。

  避难所就相当于汇点,不过避难所有多个,所以要一个超级汇点把避难所连接起来。

  如果到了避难所,就相当于到了汇点,避难所有人,相当于到了汇点,然后建一条反向边,

  如果避难所的人等于避难所的容量,相当于都到了汇点,就不会有人 还能从避难所到汇点,这种情况就不能建一条从避难所

  到汇点的边,否则就建一条从避难所到汇点的边。

  之后就是,SPFA? 判断负环,如果有一个点的入度 > 点的总数,说明有负环,那就退出来,

  但是这个点不一定在负环中,所以我们就要找到负环,

  从当前点找前驱,如果有一个点的出现过了,说明这个点在负环中。

  然后就是在负环中增广, 改变流量,找最优值。

  这个就是看负环的流向了。

上一篇:幼子心,中国情——小哈佛幼儿园国庆节主题系列教育活动
下一篇:《黑暗之魂3》主人公在外冒险时,防火女等NPC们都在干嘛?

最近更新影视资讯