模拟赛杂题1号
9.1--「EGOI2023」垃圾处理
我们知道最后要形成一颗每一个点都指向其父亲的有根树,所以每个点的出度最多为1,因此可以判掉一些情况,本题中给定m条边,在这 m 条边下,会形成森林,每一个子树上都只有一个出度为 0 的点用来和其他子树合并,我们称这个点是这颗子树的关键点。那么对于那 k 条不允许存在的边,如果他的起始点不在任意一棵子树的关键点上,那么我们必然不会用到这条边,所以真正会影响到我们的边只有从关键点向其他点延伸的边,将他们统计出来,这里会有一个误区,如果一个子树的关键点标记不能去往第二颗子树的关键点,这两棵子树就一定不直接相连了吗?
答案当然是否定的。一个关键点这需和这棵子树中的任意一个点可以相连即可,所以统计 \(cnt_{i,j}\) 表示i子树关键点有多少条不能到达的点,如果全部不能相连则需要拿一个set存储表示不可达,最后一个问题,钦定哪一个集团为根呢?我们可以在遍历 k 条不可达的边时候统计一下每一个连通块的出度,出度最多的若干个点可以轮流当根,然后我们按照类似拓扑排序的方式遍历,由于复杂度不会退化,我们此时直接就用DFS从关键点暴力遍历子树建边,即可完成。

浙公网安备 33010602011771号