SLAF
世界干涸,Zyh认为这个世界的人们离不开水,于是身为神的他要将他掌控的仅仅两个水源地放置在某两个不同的城市。这个世界的城市因为荒芜,他们仅仅保留了必要的道路,也就是说对于任意两个城市有且仅有一条可行的道路。更简单的,城市形成了一棵树。
Zyh要将这两个水源放在两个不同的城市。饥渴的人们会选择一个离他们最近的水源,并向其走去。每个城市的人的速度都是相同的,并且两个相邻(有边直接相连)的城市的距离都是1,每个人花费的时间也都是1。zyh想知道对于他的每种放置方案,最迟到达的时间是多少。
对于100%的数据 n<=200000 , m<=200000
THISR
对于询问
x,y
,如果从
x
到
那么
x
所在的树只受
证明的关键:
由于原图是一棵树,所以
x
到
首先给所有点维护,以其为子树中并且以其出发的最长链、次长链、次次长链的长度。
现在考虑如何对于一个询问而言,分别给两棵树求出从
x,y
出发的最长链。
设
deep[x]>deep[y]
,
那么从
x
向上跳
然后,树就变成了这样。
1.x
首先对于
x
而言,现在
再从
这个可以使用倍增实现,设
由于不能包含
2.y
对于
y
而言也是雷同,在
注意一下:
1.
mid=LCA
的情况;
2.
LCA
的父亲也可以产生最长链。
Dance in the Dark
这方法是真的骚。
但原题的出题人提供的解法就是维护最长链、次长链、次次长链+倍增的方法,
而非直径的那种方法。