Gym104128L Proposition Composition
很好口胡却不好写。
把边分成链边和额外边
首先想到分类讨论,显然不能只删额外边,所以有两类情况,删一链边和两链边。
如果删一链边,这一链边要么完全没被额外边覆盖,然后其他任选一条;要么被覆盖一次,额外边选覆盖它的边。用线段树简单维护即可。
现在难的是删两链边,且这两条链边都至少被覆盖了一次的情况。手玩一下发现,如果两条边被覆盖的情况完全相同,或者说覆盖它们的额外边集合是一样的,那么删去这两条额外边后,中间一定断出一个联通块,否则,一定有一条边连接中间和左边,一条连接中间和右边。
将所有覆盖情况相同的边划入一个等价类里,用双向链表连接。发现一次覆盖操作,就是将跨过覆盖左右端点的连接断开。使用线段树寻找区间中的所有点,启发式分裂等价类,时间复杂度大概是
本文作者:_kkio
本文链接:https://www.cnblogs.com/hikkio/p/17595304.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步