ARC212B 题解

学网络流学的。文章末尾附带了一个精神正常的简略版本。

对于这种简单题,我们显然是可以用网络流的,对于 的数据范围我并不知道能不能过,所以我觉得应该要写预流推进。我不会。

所以我觉得这题不应该是网络流,但是我觉得就是网络流。

于是我开始尝试手搓网络流。但是一想到数据范围是 我就觉得要写预流推进,而我并不会预流推进,所以我认为这就是一个非常困难的题目。因为我不会写。

所以我决定开始想更快的网络流做法是什么,但是我不知道网络流应该怎么写,也不知道预流推进应该怎么做。

因此我开始思考如何建模,我们发现可以把每行每列拆成一个点,每个操作就从行的点向列的点连边。容易发现这是一个二分图。因此很不难想到网络流,但是我并不会网络流。

于是我开始尝试手搓网络流。但是一想到数据范围是 我就觉得要写预流推进,而我并不会预流推进,所以我认为这就是一个非常困难的题目。因为我不会写。

所以我决定开始想更快的网络流做法是什么,但是我不知道网络流应该怎么写,也不知道预流推进应该怎么做。

因此我开始思考如何考虑代价,显然是很简单的,我们可以使用费用流来解决。

不过我并不知道费用流应该怎么写,所以我觉得这道题非常困难。

于是我开始尝试手搓费用流。但是一想到数据范围是 我就觉得要写预流推进,而我并不会预流推进,所以我认为这就是一个非常困难的题目。因为我不会写。

所以我决定开始想更快的费用流做法是什么,但是我不知道费用流应该怎么写,也不知道预流推进应该怎么做。

我已经破防了,我没有任何希望了。这是我第一次在自己有一堆 whk 作业没写完的时候开始打 ARC 比赛。

于是我决定先开始写代码,我开始寻找网络流的写法。

但是一想到数据范围是 我就觉得要写预流推进,而我并不会预流推进,所以我认为这就是一个非常困难的题目。因为我不会写。

不过我现在才知道我应该写的是费用流,我没记错的话费用流的复杂度和最大流有关系。所以我并不是很会这道题目。

因此我开始思考如何强制操作 被选。这也是简单的,可以使用上下界网络流,将这条边的上下界设置为 即可。

不过我并不知道上下界费用流应该怎么写,所以我觉得这道题非常困难。

于是我开始尝试手搓费用流。但是一想到数据范围是 我就觉得要写预流推进,而我并不会预流推进,所以我认为这就是一个非常困难的题目。因为我不会写。

所以我决定开始想更快的费用流做法是什么,但是我不知道费用流应该怎么写,也不知道预流推进应该怎么做。

我开始考虑如何保证行和列的棋子个数相等。

我发现这是一道很简单的形式,因为相等这个条件很像流量守恒。这很显然可以使用网络流来做,我们去掉源点和汇点,跑无源汇上下界网络流,在对应的行和列之间连一条容量为 ,代价为 的边即可,这样便可以保证行的出度等于列的入度,根据局上面的建模不难发现这两个就等于行和列上的棋子个数。但是边带权,所以应该是费用流。

不过我并不知道无源汇上下界可行最小费用流应该怎么写,所以我觉得这道题非常困难。

于是我开始尝试手搓费用流。但是一想到数据范围是 我就觉得要写预流推进,而我并不会预流推进,所以我认为这就是一个非常困难的题目。因为我不会写。

所以我决定开始想更快的费用流做法是什么,但是我不知道费用流应该怎么写,也不知道预流推进应该怎么做。

因此我觉得我不应该思考费用流和 flow 相关的做法。

我认为 dp 是很没有前途的东西,于是我决定从我们建出来这张图开始找性质。

先假设我们找到了一个合法的流。不对!我不应该思考费用流应该怎么做!我不会费用流!

对于 的数据范围我并不知道能不能过,所以我觉得应该要写预流推进。我不会。

所以我觉得 T1 不应该是网络流,但是我觉得就是网络流。

于是我开始尝试手搓网络流。但是一想到数据范围是 我就觉得要写预流推进,而我并不会预流推进,所以我认为这就是一个非常困难的题目。因为我不会写。

我们考虑从经过了第一个条件的边所对应的流。沿着这条流一直走下去,如果有多个选择就随便选一条。由于这条流到达的点肯定会有一条让这个流出去的点,因为要流量守恒。因此肯定有另外一条边指向了这个点。对于流上的每个点都是一样的。

因此我们猜测这个流是一个环。

但是一想到数据范围是 我就觉得要写预流推进,而我并不会预流推进,所以我认为这就是一个非常困难的题目。因为我不会写。

于是我开始尝试手搓网络流。发现如果只保留着一个流也不会有什么问题。

因此我们只需要找到一个包含了这条边的环即可。我们发现从这条边的终点跑一次到源点的最短路即可。

然后就做完了。

但是我还是不会网络流。

我真的不会网络流吗?

我真的不会网络流。

我学了两年还不会一个网络流吗?

我真的不会网络流。

想到这里,我的眼眶慢慢地被晶莹的眼泪覆盖,因为我的 whk 作业还没写完,而且明天是周一。我不禁开始后悔,可是世界上哪里有什么后悔药啊。

我想网络流的思想也是类似的,因为网络流就是通过建立反向边来起到“反悔”的一个作用。可是这世上哪里有什么反向边。


我痛定思痛,决定用仅存的斗志和理智把这道题写出来,然后

1
const ll INF = 1e9;

喜提 WA。改完过了。

然后我就去写我的 whk 作业了。


考虑对于每行和每列写一个点,记作 。我们发现每次操作相当于给一个 和一个 的权值加上 。我们最终要保证 的权值相等。

我们发现保证两个点权值相等很像网络流的流量守恒,因此我们考虑直接把两个点合并成一个点,或者考虑从 连一条容量为无穷大的边即可。由于每个点都需要流量守恒,并且有一个边有下界限制,因此我们需要跑无源汇上下界可行最小费用流。

但是进一步观察发现,如果一个流(必然是一个环,否则无法流量守恒)不经过操作 对应的边,那么去掉显然不会更劣。因此我们要找到一个经过特定边的最小环。断开那条边,相当与要找最短路。跑迪杰斯特拉即可。

参考代码


ARC212B 题解
https://blogs.sving1024.top/posts/40373/
发布于
2026年1月12日
许可协议