P11428 [清华集训 2024] 前往何方

给定 \(n\),交互库持有隐藏的大小为 \(n\) 的数。初始 \(S=\emptyset\),每次可以加入或者删去一个数,交互库会报告将树上 \(S\) 内的点染黑后,最大的黑色连通块大小。

给定 \(n\le 10^4\),在 \(6\times10^5\) 次询问内还原这棵树。


考虑先令 \(S\) 为全集,每次删去 \(x\),记得到的结果为 \(f_x\)。

使 \(f_x\) 取得最小值的 \(x_0\) 即为重心,考虑按 \(f_x\) 排序,可得一以 \(x_0\) 为根的拓扑序。证明考虑 \(f_{fa_i}<f_i\)。

有了拓扑序之后,考虑确定每个点的父亲。拓扑序上的一个前缀必定构成连通块,因此可以 \(2\) 次操作判定 \(x\) 的父亲是否属于一段前缀。换句话说,给出 \(\text{mid}\),可以查询 \([fa_i\le \text{mid}]\),那么整体二分即可。

总询问次数 \(3n\log n +\mathcal O(n)\)。

posted @ 2026-10-27 15:53  CuteNess  阅读(8)  评论(0)    收藏  举报