UNR #6 D2T2 神隐

首先观察操作次数限制可以猜出询问方法应该是选取 \(20\) 的所有大小为 \(10\) 的子集作为边的编号,在第 \(i\) 次问第 \(i\) 位上是 \(1\) 的边。这样 \(u\)\(v\) 有边(相隔边数不超过 \(1\))当且仅当 \(u\)\(v\) 在恰好 \(10\) 次询问中连通。

直接做不好做,但我们可以找到叶子:在恰好 \(10\) 次询问中独自成为一个连通块。找到叶子后删掉,这样可以算出以某个点为根时的子树高度 \(h_u\)(只剩两个点可能要判一下?)

我们要找到某个叶子 \(u\) 的父亲,即包含 \(u\) 的大小 \(>1\) 的连通块的交(交的大小一定是 \(1\)),仍然不好做。

但还有更巧妙的结论:交一定是这些连通块中 \(h\) 最大点中的一个,即连通块中最浅的点中的一个(考虑这样一定能找到父亲且不会找到更浅的点)。取这些点中最深的就可以找到 \(u\) 的父亲。

感觉最后一步很难想到,代码很快会补上 貌似就这题没补

posted @ 2022-08-07 18:08  RiverHamster  阅读(100)  评论(0编辑  收藏  举报
\