题解:P14390 [JOISC 2017] 自然公园 / Natural Park
这题部分分比较有启发性,但是我怎么会树不会图。
考虑怎么做链。关键在于你知道
其中绿色节点为每次找到的路径上的编号最大值,或直接加入链头的那个点。
尝试扩展到树上。发现我们在链上扩展链头的过程可以看成在维护一个连通块,因此我们考虑在树上维护一个包含
但是你发现这样判点是否与连通块相邻会出问题:我们并不知道这个点到底与哪个点相邻!能不能考虑二分这个点呢?按普通编号二分是不可以的,这样子二分得到的会是
现在考虑扩展到图上。问题到了图上,树上的做法会出现什么问题呢?
不难发现,若是按照树的做法去做,我们只能够得到原图的一棵生成树,并不能得到原图,原因就是我们在加入一个点时并没有加入所有这个点连到已确定连通块的所有边。于是接下来我们尝试去找到这些边。
我们第一次找到的是连向连通块内 dfs 序最小的点,我们不希望这个点再对我们找剩余的边产生影响。怎么办呢?我们把它直接删掉!然后,连通块剩下的部分可能会分成若干连通块,我们在这些连通块内递归寻找即可。询问次数会不会爆炸?由于题目保证每个点度数至多为
找出连通块内边的过程大致如下图:
其中,绿色点为我们想要加入连通块的点,加粗的边为我们每次找到的边。
这样,我们就以