题解 洛谷P6966 【[NEERC2016]Cactus Construction】

我们先来考虑树的情况怎么做:

  • 在树上 dfs,不断合并子树

我们只需要把深度最浅的点染成颜色染成颜色 \(2\),其他染成颜色 \(1\),然后在一个点合并子树时,它的颜色是 \(3\),合并完之后可以把它的颜色改成 \(2\)。也就是在树上我们只需要 \(3\) 种颜色。

\(\color{red}\text{在仙人掌上,需要特殊考虑的也只有环末了。}\)

因为断环为链后,环末是链上深度最大的,但是我们又需要它连边,所以只要给它染颜色 \(4\),然后在各种情况下特判即可。

在一个环深度最浅的地方,把颜色 \(4\) 的边也连上去,同时把它染成 \(1\)

在环的链传递时,判断一下后继是否是环末。其余的就是类似树的方法了。

剩下就只需要注意细节即可。细节比较繁琐,需要细心处理。代码鬼畜,细节繁多,无法突出重点,就不放了。

posted @ 2021-03-12 20:59  Bushuai_Tang  阅读(53)  评论(0编辑  收藏  举报