水塘 Pool construction 题解
一道真的很值得做的好题!!
题目让我们求费用最小值,于是我们可以尝试最小割,让割掉的作为费用。
观察到一个格子要么是水塘,要么是草地,所以如果我们想要将一个格子的属性变化的话,一定要把它在图中割掉。所以我们不妨将源点连向每一个格子,再将每一个格子连向汇点,源点连向格子代表把这个格子变成草地需要花费的费用,格子连向汇点代表这个格子变成水洼的费用。为了让图变的不连通,我们一定要割掉其中一个,这就代表着花费/不花费钱去改变/不改变该格子属性。
接下来就是将赋容量了。
根据我们刚才连边的意义,如果这个格子原本是草地,那么源点向他的连边为 \(0\),意味着它本来就是草地,(变成草地)不需要花费任何费用;连向汇点的边容量就要为 \(d\),代表花费 \(d\) 去将他变为水洼。如果这个格子是水洼同理,源点向其连边容量 \(f\),它向汇点连边容量 \(0\)。
但这还没完,还需要建围栏。
于是我们将每一个格子向其相邻格子连一个容量 \(b\) 的边,如果两个格子属性不同,只有割掉这条边才能使图不连通,否则不需要割。

浙公网安备 33010602011771号