题意 一棵 \(n\) 个节点的树, 树的每个节点上有一个观察员, 每一个观察员的观察时刻为 \(time_i\) , 有 \(m\) 个玩家, 每个玩家在 \(0\) 时刻时从起点 \(s_i\) 开始跑步, 每时刻经过一个节点, 沿着最短路径向终点 \(t_i\) 跑去. 求每个观察员能观察到的玩家数量. 思路 暴力枚举每个玩家的行进路线一定是 \(O(n^2)\) 的, 不可行, 那么考虑枚举每一个观察员, 求它能观察到多少个选手. 若观察员 \(x\) 位于 \(s_i\) 到 \(lca_i\) 的路径上, 那么 \(x\) 能观察到 \(i\) 的条件为 \[ time_x = dep_{s_i} - dep_x \] 转化一下变为, \[ time_x+dep_x = dep_{s_i} \] 若 \(x\) 位于 \(t_i\) 到 \(lca_i\) 的路径上, 那么 \(x\) 能观察到 \(i\) 的条件为 \[ time_x = dis_{s_i \to t_i} - (dep_t - dep_x) \] 转化, \[ time_x - dep_x = dis - dep_t = dep_s - 2*dep_{lca_i} \] 看起来树上差分, 枚举每个点的子树, 开个桶记录就好了. 但有个问题, 就是之前的桶会影响当前枚举到的点. 我的做法比较蠢,