给定一棵有 \(n\) 个节点的树和 \(T\) 组询问。每组询问给定 \(m\) 个关键点,设 \(f(y)\) 表示离 \(y\) 最近的关键点(多个取编号最小。)请回答对于每个关键点 \(x\),有多少个 \(f(y) = x\)。
\(n, \sum m \le 3 \times 10^5\)。
这种问题一看就是要建出虚树的。建完虚树后可以先求出虚树上的点的 \(f(y)\) 以及距离 \(dis(y)\)(使用换根即可)。对于一条虚树上的边 \(u, v\),肯定是被划分成两部分,一部分的 \(f(y) = f(u)\),另一部分为 \(f(y) = f(v)\),可以根据 \(dis(u), dis(v)\) 找出这个分界点,然后用子树大小算一下贡献即可。可能要特判下 \(f(u) = f(v)\) 的情况。
时间复杂度:\(O(\sum m \log m)\)。