CF1061F Lost Root

CF1061F Lost Root

Description

这是一道交互题。

有一棵 \(n\) 个结点的满 \(k\) 叉树,每次可以询问一个点是否在两个点的路径上。你需要用不多于 \(60n\) 次询问找到这棵树的根结点。

\(3 \le n \le 1500, 2 \le k \le 1500\)

Solution

有意思的交互题。

注意到叶子结点很多,并且层数很少。一个自然的想法是先找一个叶子结点再不断找它的父亲。但是我们发现询问操作和根是哪个结点没有关系。我们可以从两个 LCA 为根节点叶子节点路径的角度出发。

首先来考虑如何判断一个结点是不是叶子结点。对于叶子结点 \(u\),我们考虑另一个结点 \(v\),然后询问 \(v\) 到所有点的路径是否经过了 \(u\)。不难发现 \(u\) 是叶子结点当且仅当只有 \(v \to u\) 的路径经过了 \(u\)。这样我们期望随机 \(2\) 次或更少就能找到一个叶子结点了。

我们可以找到两个 LCA 为根节点的叶子结点,然后查询出他们之间的路径,再通过查询 \(u\) 和一个点的路径是否经过另一个点得到它们的先后顺序,因为路径很短所以不会超。这样最中间的那个点就是根节点了。

posted @ 2021-08-14 11:29  Scintilla06  阅读(25)  评论(0编辑  收藏  举报