给定一棵 个点的树, 条链, 个询问,每次询问 到 之间的路径最少可用几条给定链完全覆盖,无解输出 。
Constraints
, ,
Solution
对于每一条 与 间的路径,都可拆分为 到 的路径和 到 的路径
采用贪心策略, 表示从 点出发向上选择不超过 条链可抵达的深度最浅的点。这时对于每一个询问可将询问的两个端点修改为利用贪心策略跳到的深度大于 且深度最小的节点,并记录下答案,这个过程可以用倍增完成。注意特判端点即 的情况。
然后出现两种情况。若修改后的两个端点出现在同一条给定链上,答案为原答案 ,否则答案为原答案 。问题模型转换为,每次询问一个点对是否出现在同一条给定链上。记录下 dfs 序,在深搜过程中利用树状数组统计即可。
时间复杂度 。
Code
1 |
|