这题需要大量的lca,预处理是可以,但是会写死,因此采用rmq。
先学会如何求两个路径[a,b],[c,d]的交。
只要分别求c,d到[a,b]距离最近的点[u,v],然后判u,v是否在[c,d]上即可。下面以用c求u为例。
r<-lca(a,b)
if lca(r,c)!=r then u<-r
else if lca(a,c)!=r then u<-lca(a,c)
else u<-lca(b,c)
然后检验。
r<-lca(c,d)
u∈[c,d]当且仅当u在r的子树中(lca(u,r)==r)且lca(c,u)与lca(d,u)中有一个为u
同理求出并检验v
然后分类讨论。设s1、t1为[a,b]上的那个人到达、离开[u,v]