C题考虑这样一个子问题:给定树上的点集 和询问点 ,判断是否存在 ,满足 ,其中 为两点路径的边数, 为当前时间戳, 为 加入的时间戳。 硬拆式子 其中 表示 到根路径经过的边数。 这个 不太好搞,但注意到 取 的公共祖先时,式子 在 处取得最大值,所以只需要维护所有公共祖先就可以了,也就是修改和查询直接操作所有祖先。 感性理解就是,如果在更早的祖先处绕了远路,肯定只会更合法。 对每个点维护初值 ,然后树链剖分+标记永久化线段树 复杂度 #include <iostream> #include <cstdio> #include <cst...