网络流24题练习(自用)

P2756

  • 此题就是求图中的最小割问题。使用 ek 算法跑完最大流后,有流量经过的边就是最小割的割边,但是我们在 ek 算法中并没有存“容量”,要判断此边中有没有流量经过,我们需要看的是反向边的流量是否等于 0,因为一旦边中有流量经过,其反向边流量就一定不为 0。

P2761

  • 不知道为什么在题单里,建模还是比较简单的,把 bug 的状态作为节点就可以,补丁就是边。需要注意的是状压的部分:开始我想要把每个点的 B1、B2 搞到一个 long long 中,0 表示B1,1 表示B2,但是由于有“0”的存在,当我们遇到“0”时,需要把当前位为 1 和当前位为 0 都作为一个节点往外连边,这样如果每一个点都是“0”的话,我们需要开 \(2^{20}\) 个点,这样点的规模最大会到 \(2^{20} * 200\),这显然不行。但是我们发现如果用四个 long long 分别存储 B1、B2、F1、F2 的状态,每一位表示“是否有“,这样可以在 spfa 中通过遍历所有边,并依靠位运算来判断当前节点能否走这个边,然后通过位运算将目标节点入队,这样跑最短路的可行性和正确性是可以保证的。

P4016

  • 费用流,此题重点在于建图。此题有一个“初始状态”以及“最终要保持的状态”,这就是我们的源点和汇点建立的关键,我们将“初始状态”转化为“从源点按照初始大小流入各点”,将“最终状态”转化为“从各点按照最终大小流入汇点”,只要能跑通,说明可以出现最终的状态。还有需要注意的是相邻点之间的边并没有容量上限,也就是说它的流量没有限制,想交换多少就交换多少。

posted on 2024-09-11 10:29  wuhu12345  阅读(19)  评论(0)    收藏  举报

导航