Gym104128L Proposition Composition

发布时间 2023-07-31 23:31:50作者: _kkio

很好口胡却不好写。

把边分成链边和额外边

首先想到分类讨论,显然不能只删额外边,所以有两类情况,删一链边和两链边。

如果删一链边,这一链边要么完全没被额外边覆盖,然后其他任选一条;要么被覆盖一次,额外边选覆盖它的边。用线段树简单维护即可。

现在难的是删两链边,且这两条链边都至少被覆盖了一次的情况。手玩一下发现,如果两条边被覆盖的情况完全相同,或者说覆盖它们的额外边集合是一样的,那么删去这两条额外边后,中间一定断出一个联通块,否则,一定有一条边连接中间和左边,一条连接中间和右边。

将所有覆盖情况相同的边划入一个等价类里,用双向链表连接。发现一次覆盖操作,就是将跨过覆盖左右端点的连接断开。使用线段树寻找区间中的所有点,启发式分裂等价类,时间复杂度大概是 \(\mathcal{O}(nlog^2n)\) 的。可以通过。