QOJ # 6508. This is not an Abnormal Team!
感觉网络流学艺不精,被薄纱了/kk
原题意是最少一个点的链,在此基础上最少三个点的链,比较难去用网络流考虑。换个思路:先最大匹配出两点链,然后让最多两点链合并上一个单点变成三点链。这样显然单点最少,并且保证了不会有 \(3\) 个两点链合并成两个三点链,所以这样是符合题目要求的。
刚开始最大匹配两点链是平凡的。在两点链合并成三点链的过程中,一个两点链只能在两端的其中一端扩展一个单点。
我一开始将两端放在一起考虑,然后就寄了,怎么都想不出来,因为这样点被分得非常杂乱,有 \(4\) 个等价类,无法用二分图来刻画。正确的方法是比如先考虑左部点扩展一个右部单点,这只需要在跑完二分图匹配的残量网络上对于每个匹配过的左左部点连一条流量,对于每个没匹配过的右部点连一个流量,然后跑最大匹配即可。而右部扩展左部也是类似的。
这个做法的正确性在于其在残量网络上跑这个东西,所以能反悔的都可以反悔。时间复杂度是 Dicnic 的 \(O(m\sqrt n)\)。