CF1129E
先问 \((\{1\},\{2,3,4,\cdots ,n\},i)\) 然后就可以得到所有点的子树大小了。那么现在的问题就是求每一个点的父亲是什么。
假设目前叶子节点的集合为 \(S\),同时设 \(k = |S|\)。假设现在考虑到了第 \(i\) 个点,那么我们先问一边 \((\{1\},\{S_1,S_2,S_3,\cdots,S_k\},i)\),然后我们就知道他的儿子个数了然后二分去求出每一个儿子的位置,具体的找到最小的 \((\{1\},\{S_1,S_2,\cdots,S_p\},i)\) 大于 \(0\),然后重复这个操作 \(k\) 次即可。重复完之后把这个节点的所有儿子节点从 \(S\) 中删除,然后将这个点加入 \(S\) 即可,次数大概为 \(2n+2n\log n\) 次。