题意简述
对于点
u , v u,v u , v ,定义它们之间的距离
d i s ( u , v ) dis(u,v) d i s ( u , v ) 为树上两点间简单路径的边数。
对于点
u u u ,路径
P P P ,定义它们之间的距离
d i s ( u , P ) = min v ∈ P { d i s ( u , v ) } dis(u,P)=\displaystyle\min_{v\in P}\{dis(u,v)\} d i s ( u , P ) = v ∈ P min { d i s ( u , v )} 。
对于路径
P , Q P,Q P , Q ,定义它们之间的距离
d i s ( P , Q ) = min u ∈ P , v ∈ Q { d i s ( u , v ) } dis(P,Q)=\displaystyle\min_{u\in P,v\in Q}\{dis(u,v)\} d i s ( P , Q ) = u ∈ P , v ∈ Q min { d i s ( u , v )} 。
现在有一个初始为空的可重路径
S S S ,有
Q Q Q 次操作,操作共有三种:
往 S S S 中加入一条路径 P P P 。
从 S S S 中删除一条路径 P P P 。
给定 d d d ,问是否存在点 x x x ,满足 ∀ P ∈ S , d i s ( x , S ) ≤ d \forall P\in S,dis(x,S)\leq d ∀ P ∈ S , d i s ( x , S ) ≤ d 。
另一个版本是只有前两种操作,每次后求出
F = min x { max P ∈ S { d i s ( x , P ) } F=\displaystyle\min_x\{\max_{P\in S}\{dis(x,P)\} F = x min { P ∈ S max { d i s ( x , P )} 。
前置结论
下面两个做法都要用到一个结论:
对于点集 S S S ,设 u , v ∈ S u,v\in S u , v ∈ S 满足 d i s ( u , v ) = max x , y ∈ S { d i s ( x , y ) } dis(u,v)=\displaystyle\max_{x,y\in S}\{dis(x,y)\} d i s ( u , v ) = x , y ∈ S max { d i s ( x , y )} ,也就是 u , v u,v u , v 是点集 S S S 中距离最远的一对点。那么对于树上任意的点 x x x ,它到点集
S S S 的最远距离为 max y ∈ S { d i s ( x , y ) } = max { d i s ( x , u ) , d i s ( x , v ) } \displaystyle\max_{y\in S}\{dis(x,y)\}=\max\{dis(x,u),dis(x,v)\} y ∈ S max { d i s ( x , y )} = max { d i s ( x , u ) , d i s ( x , v )} 。
解法一
求
F F F 可以二分转化成
log n \log n log n 次上面的操作 3。
对于路径问题,一个思路是将考虑一条路径变成考虑若干关键点。而一条路径只有一个
l c a lca l c a ,所以考虑
l c a lca l c a 可能有用。
随便找一个树根,对于点
x x x 记其
k k k 级祖先为
a n c ( x , k ) anc(x,k) an c ( x , k ) ,子树为
T x T_x T x 。
考虑操作 3 中什么时候存在满足条件的
x x x 。对于每条路径
P P P ,一个必要条件是
x x x 要在
a n c ( l c a ( P ) , d ) anc(lca(P),d) an c ( l c a ( P ) , d ) 的子树中,否则一定有
d i s ( x , P ) > d dis(x,P)>d d i s ( x , P ) > d 。既然是子树限制,那么考虑最深的
l c a ( P ) lca(P) l c a ( P ) ,记
u = a n c ( l c a ( P ) , d ) u=anc(lca(P),d) u = an c ( l c a ( P ) , d ) ,那么
x x x 一定在
T u T_u T u 中。而为了尽可能满足其他路径的限制,
x = u x=u x = u 看起来就很好。事实上,可以证明存在满足条件的
x x x ,当且仅当
u u u 满足条件,证明如下:
显然 u u u 满足条件的时候,已经找到满足条件的 x x x 。
如果 u u u 不满足条件,那么存在 P ∈ S P\in S P ∈ S ,使得 d i s ( u , S ) > d dis(u,S)>d d i s ( u , S ) > d 。
如果 P P P 与 T u T_u T u 有交,显然 P P P 不能经过 u u u ,所以 P ∈ T u P\in T_u P ∈ T u ,但由于选的是最深的 u u u ,此时必然有 d i s ( l c a ( P ) , u ) ≤ d dis(lca(P),u)\leq d d i s ( l c a ( P ) , u ) ≤ d ,矛盾。
如果 P P P 与 T u T_u T u 无交,那么对于任意 x ∈ T u x\in T_u x ∈ T u ,x x x 到 P P P 上任意一点的路径都要经过 u u u ,所以 d i s ( x , P ) ≥ d i s ( u , P ) dis(x,P)\geq dis(u,P) d i s ( x , P ) ≥ d i s ( u , P ) ,故不存在满足条件的 x x x 。
所以只需要检验
u u u 是否合法即可。和上面类似还是考虑
v = a n c ( u , d ) v=anc(u,d) v = an c ( u , d ) ,那么首先所有路径都要和
T v T_v T v 有交。接下来对路径
P P P 的
l c a lca l c a 分类讨论一下:
如果 l c a ( P ) ∈ T u lca(P)\in T_u l c a ( P ) ∈ T u ,这个上面讨论过了,一定有 d i s ( u , P ) ≤ d dis(u,P)\leq d d i s ( u , P ) ≤ d 。
如果 l c a ( P ) lca(P) l c a ( P ) 在路径 ( u , v ) (u,v) ( u , v ) 上,那么 d i s ( u , P ) ≤ d i s ( u , l c a ( P ) ) ≤ d i s ( u , v ) ≤ d dis(u,P)\leq dis(u,lca(P))\leq dis(u,v)\leq d d i s ( u , P ) ≤ d i s ( u , l c a ( P )) ≤ d i s ( u , v ) ≤ d 。
如果 l c a ( P ) ∉ T v lca(P)\notin T_v l c a ( P ) ∈ / T v ,由于 P P P 和 T v T_v T v 有交,所以 P P P 经过 v v v ,也有 d i s ( u , P ) ≤ d dis(u,P)\leq d d i s ( u , P ) ≤ d 。
否则,l c a ( P ) lca(P) l c a ( P ) 和 u u u 没有祖先后代关系,此时有 d i s ( u , P ) = d i s ( u , l c a ( P ) ) dis(u,P)=dis(u,lca(P)) d i s ( u , P ) = d i s ( u , l c a ( P )) ,故条件等价于 d i s ( u , l c a ( P ) ) ≤ d dis(u,lca(P))\leq d d i s ( u , l c a ( P )) ≤ d 。
可以发现,对于前两种情况,也一定有
d i s ( u , l c a ( P ) ) ≤ d dis(u,lca(P))\leq d d i s ( u , l c a ( P )) ≤ d ,所以可以将条件转化为:
∀ P ∈ S , P ∩ T v ≠ ∅ \forall P\in S,P\cap T_v\neq \empty ∀ P ∈ S , P ∩ T v = ∅ 。
∀ P ∈ S ∧ l c a ( P ) ∈ T v , d i s ( u , l c a ( P ) ) ≤ d \forall P\in S\wedge lca(P)\in T_v,dis(u,lca(P))\leq d ∀ P ∈ S ∧ l c a ( P ) ∈ T v , d i s ( u , l c a ( P )) ≤ d 。
对于第一个条件,可以用树状数组维护树上差分解决。
对于第二个条件,实际上是要
u u u 到所有在
v v v 的子树内的
l c a ( P ) lca(P) l c a ( P ) 的距离最大值。这就是前置结论中的问题,线段树维护点集直径即可。
树剖求
l c a lca l c a 可以做到
O ( n + Q log 2 n ) O(n+Q\log^2n) O ( n + Q log 2 n ) ,转
R M Q \mathrm{RMQ} RMQ 用 st 表可以做到
O ( n log n + Q log n ) O(n\log n+Q\log n) O ( n log n + Q log n ) 。
求
F F F 则是
O ( n + Q log 3 n ) O(n+Q\log^3n) O ( n + Q log 3 n ) 或
O ( n log n + Q log 2 n ) O(n\log n+Q\log^2n) O ( n log n + Q log 2 n ) 。
解法二
上面的解法中我们将求
F F F 通过二分转化为操作 3,现在反过来,求出
F F F 后和
d d d 比较来回答操作 3。
考虑一个特殊情况:所有路径都是单点。此时路径集
S S S 变成了点集,那么就是求
F = min x { max u ∈ S { d i s ( x , u ) } F=\displaystyle\min_x\{\max_{u\in S}\{dis(x,u)\} F = x min { u ∈ S max { d i s ( x , u )} 。对于每个
x x x ,要求它到点集
S S S 的最大距离,那么由前置结论,求出
S S S 的直径
( u , v ) (u,v) ( u , v ) ,就有
F = min x { max { d i s ( x , u ) , d i s ( x , v ) } F=\displaystyle\min_x\{\max\{dis(x,u),dis(x,v)\} F = x min { max { d i s ( x , u ) , d i s ( x , v )} 。对于所有
x x x 求最小值,那么取到最小的
x x x 就应该是
( u , v ) (u,v) ( u , v ) 路径的中点,故
F = ⌈ d i s ( u , v ) 2 ⌉ F=\lceil\frac{dis(u,v)}{2}\rceil F = ⌈ 2 d i s ( u , v ) ⌉ 。
现在
S S S 中不是点而是路径,有什么区别呢?可以大胆猜想没有什么区别,记路径集直径
D ( S ) = max P , Q ∈ S { d i s ( P , Q ) } D(S)=\displaystyle\max_{P,Q\in S}\{dis(P,Q)\} D ( S ) = P , Q ∈ S max { d i s ( P , Q )} ,则
F = ⌈ D ( S ) 2 ⌉ F=\lceil\frac{D(S)}{2}\rceil F = ⌈ 2 D ( S ) ⌉ 。
设
S S S 中距离最远的两条路径是
P , Q P,Q P , Q ,那么要证明上面这个结论,我们证明对于任意的点
x x x ,
x x x 到
S S S 中路径的最远距离是:
{ max { d i s ( x , P ) , d i s ( x , Q ) } , D ( S ) > 0 d i s ( x , ⋂ p ∈ S p ) , D ( S ) = 0 \begin{cases}
\max\{dis(x,P),dis(x,Q)\}, &D(S)>0\\
dis(x,\bigcap_{p\in S}p), &D(S)=0
\end{cases} { max { d i s ( x , P ) , d i s ( x , Q )} , d i s ( x , ⋂ p ∈ S p ) , D ( S ) > 0 D ( S ) = 0
即在
D ( S ) > 0 D(S)>0 D ( S ) > 0 时只需要考虑最远的两条路径,在
D ( S ) = 0 D(S)=0 D ( S ) = 0 时只需要考虑所有路径的交(此时这个交一定非空)。
先证明
D ( S ) > 0 D(S)>0 D ( S ) > 0 的情况,假设存在路径
R R R ,满足
d i s ( x , R ) > d i s ( x , P ) , d i s ( x , Q ) dis(x,R)>dis(x,P),dis(x,Q) d i s ( x , R ) > d i s ( x , P ) , d i s ( x , Q ) ,将路径
R R R 作为树根,其他部分会形成若干子树,显然
x x x 不在
R R R 上,不妨 设
x x x 在子树
u u u 中,与
u u u 相邻的
R R R 上的点是
f f f ,则
d i s ( x , R ) = d i s ( x , f ) dis(x,R)=dis(x,f) d i s ( x , R ) = d i s ( x , f ) 。如下图:
接下来分类讨论有点多,建议画一张这种图以更好地理解:
若 P , Q P,Q P , Q 中至少一条与子树 u u u 无交(不妨设为 P P P ),那么从 x x x 到 P P P 上任何一点都要经过 ( u , f ) (u,f) ( u , f ) 这条边,所以 d i s ( x , P ) ≥ d i s ( x , f ) dis(x,P)\geq dis(x,f) d i s ( x , P ) ≥ d i s ( x , f ) ,矛盾;
若 P , Q P,Q P , Q 中至少一条经过 u u u (不妨设为 P P P ),那么显然 Q Q Q 不经过 u u u ,所以 Q Q Q 在 u u u 子树内,此时 d i s ( R , Q ) = d i s ( f , Q ) > d i s ( u , Q ) ≥ d i s ( P , Q ) dis(R,Q)=dis(f,Q)>dis(u,Q)\geq dis(P,Q) d i s ( R , Q ) = d i s ( f , Q ) > d i s ( u , Q ) ≥ d i s ( P , Q ) ,矛盾。
对于下面的几种情况,P , Q P,Q P , Q 都在 u u u 子树内,所以 d i s ( P , R ) = d i s ( l c a ( P ) , f ) , d i s ( Q , R ) = d i s ( l c a ( Q ) , f ) dis(P,R)=dis(lca(P),f),dis(Q,R)=dis(lca(Q),f) d i s ( P , R ) = d i s ( l c a ( P ) , f ) , d i s ( Q , R ) = d i s ( l c a ( Q ) , f ) 。方便起见,记 p = l c a ( P ) , q = l c a ( Q ) p=lca(P),q=lca(Q) p = l c a ( P ) , q = l c a ( Q ) 。
若 p , q p,q p , q 存在祖先后代关系(不妨设 p p p 是祖先),那么有 d i s ( f , q ) > d i s ( p , q ) ≥ d i s ( P , Q ) dis(f,q)>dis(p,q)\geq dis(P,Q) d i s ( f , q ) > d i s ( p , q ) ≥ d i s ( P , Q ) ,矛盾;
当 p , q p,q p , q 不存在祖先后代关系时,有 d i s ( P , Q ) = d i s ( p , q ) dis(P,Q)=dis(p,q) d i s ( P , Q ) = d i s ( p , q ) 。
若 P , Q P,Q P , Q 中有一个与路径 ( x , u ) (x,u) ( x , u ) 有交(不妨设为 P P P ),那么 Q Q Q 肯定与 ( x , u ) (x,u) ( x , u ) 无交(否则会变成情况 4),那么此时 q q q 为 x x x 的后代或者没有祖先后代关系,所以有 d i s ( x , Q ) = d i s ( x , q ) dis(x,Q)=dis(x,q) d i s ( x , Q ) = d i s ( x , q ) ,且 d i s ( x , P ) ≤ d i s ( x , p ) < d i s ( x , f ) dis(x,P)\leq dis(x,p)<dis(x,f) d i s ( x , P ) ≤ d i s ( x , p ) < d i s ( x , f ) 。
这时候考察点 x x x 和点集 f , p , q {f,p,q} f , p , q ,由 d i s ( P , Q ) ≥ d i s ( P , R ) , d i s ( Q , R ) dis(P,Q)\geq dis(P,R),dis(Q,R) d i s ( P , Q ) ≥ d i s ( P , R ) , d i s ( Q , R ) ,得 d i s ( p , q ) ≥ d i s ( p , f ) , d i s ( q , f ) dis(p,q)\geq dis(p,f),dis(q,f) d i s ( p , q ) ≥ d i s ( p , f ) , d i s ( q , f ) 。
那么由点到点集的最远距离的结论,有 max { d i s ( x , p ) , d i s ( x , q ) } ≥ d i s ( x , f ) \max\{dis(x,p),dis(x,q)\}\geq dis(x,f) max { d i s ( x , p ) , d i s ( x , q )} ≥ d i s ( x , f ) ,这与 max { d i s ( x , P ) , d i s ( x , Q ) } ≥ d i s ( x , R ) \max\{dis(x,P),dis(x,Q)\}\geq dis(x,R) max { d i s ( x , P ) , d i s ( x , Q )} ≥ d i s ( x , R ) 矛盾。
若 P , Q P,Q P , Q 均和 ( x , u ) (x,u) ( x , u ) 无交,那么和上面类似有 d i s ( x , P ) = d i s ( x , p ) , d i s ( x , Q ) = d i s ( x , q ) dis(x,P)=dis(x,p),dis(x,Q)=dis(x,q) d i s ( x , P ) = d i s ( x , p ) , d i s ( x , Q ) = d i s ( x , q ) ,会导出一样的矛盾。
上面的讨论覆盖了所有情况,故这部分得证。
对于
D ( S ) = 0 D(S)=0 D ( S ) = 0 的情况,可以归纳变成只有两条路径的情况,设为
P , Q P,Q P , Q ,记
R = P ∩ Q R=P\cap Q R = P ∩ Q 。如下图:
可以发现本质上
x x x 所在的子树只有三种不同情况:接在
P ∖ R P\setminus R P ∖ R 上、接在
Q ∖ R Q\setminus R Q ∖ R 上、接在
R R R 上。分别讨论不难证明。
剩下的问题就是要维护最远的
P , Q P,Q P , Q 或所有路径的交。求出两条路径的距离或者交可以根据四个端点两两的
l c a lca l c a 分类讨论得到。对于路径之间的距离,有和上面类似的结论:任意的路径
p p p ,
p p p 到
S S S 中路径的最远距离是:
{ max { d i s ( p , P ) , d i s ( p , Q ) } , D ( S ) > 0 d i s ( p , ⋂ q ∈ S q ) , D ( S ) = 0 \begin{cases}
\max\{dis(p,P),dis(p,Q)\}, &D(S)>0\\
dis(p,\bigcap_{q\in S}q), &D(S)=0
\end{cases} { max { d i s ( p , P ) , d i s ( p , Q )} , d i s ( p , ⋂ q ∈ S q ) , D ( S ) > 0 D ( S ) = 0
证明也差不多。所以可以类似线段树维护点集直径用线段树维护路径集直径。
用 st 表求
l c a lca l c a 复杂度
O ( ( n + Q ) log n ) O((n+Q)\log n) O (( n + Q ) log n ) 。