震惊!树上莫队竟然可以这样写? 99%的人都不知道树上询问链信息的算法竟然是它!不看后悔一辈子!

有一天,蒟蒻 z y d zyd zyd被一股来自东方的神秘力量吸走。
等他醒来时,他看到了一个背影……
他走过去,那是一个年过九十的长者,穿着西服,裤子提的很高,戴着一副黑框眼镜。
长者正在看一道难题,zyd也看了看:
给出一棵树,每个点有一个权值 v v v,现在给出 Q Q Q个询问,每个询问给出一条链 u − > v u->v u>v,需要求出链上有多少个不同的权值。

zyd由于太蒻看不懂题,向长者求教。
长者:你们还是图样,要提高自己的知识水平,美国的……不知道比你们高到哪里去了。来看下面这张图:
震惊!树上莫队竟然可以这样写? 99%的人都不知道树上询问链信息的算法竟然是它!不看后悔一辈子!_第1张图片
长者:欧拉序你会求吧?就是dfs的时候,访问和回溯节点的时候都把它加入序列中。这张图欧拉序是 1 , 2 , 3 , 3 , 4 , 4 , 2 , 5 , 5 , 6 , 6 , 1 1,2,3,3,4,4,2,5,5,6,6,1 1,2,3,3,4,4,2,5,5,6,6,1

蒟蒻zyd:(思考了一会)所以是要把树上的链转化成欧拉序上的问题,然后跑莫队?

长者微微一笑:没错,莫队有一个好,全序列不管跑到什么地方,莫队比其他的暴力跑得都快!

蒟蒻zyd:那就直接大力莫队就珂以了吗qwq?

长者:naive! 这里树上莫队要分两种情况:
首先令 L [ i ] , R [ i ] L[i],R[i] L[i],R[i]表示欧拉序中 i i i第一次出现的位置和第二次出现的位置。
然后对于一个询问,不妨假设 L [ u ] > L [ v ] . L[u]>L[v]. L[u]>L[v].
分类讨论:
1. u 1.u 1.u v v v的祖先
震惊!树上莫队竟然可以这样写? 99%的人都不知道树上询问链信息的算法竟然是它!不看后悔一辈子!_第2张图片
欧拉序是 1 , 2 , 3 , 3 , 4 , 4 , 2 , 5 , 5 , 6 , 6 , 1 1,2,3,3,4,4,2,5,5,6,6,1 1,2,3,3,4,4,2,5,5,6,6,1,又有 u = 1 , v = 3 , L [ u ] = 1 , L [ v ] = 3. u=1,v=3,L[u]=1,L[v]=3. u=1,v=3,L[u]=1,L[v]=3.
这种,在欧拉序上对应的区间就是 [ L [ u ] , L [ v ] ] [L[u],L[v]] [L[u],L[v]]

2. u 2.u 2.u不是 v v v的祖先
震惊!树上莫队竟然可以这样写? 99%的人都不知道树上询问链信息的算法竟然是它!不看后悔一辈子!_第3张图片
欧拉序是 1 , 2 , 3 , 3 , 4 , 4 , 2 , 5 , 5 , 6 , 6 , 1 1,2,3,3,4,4,2,5,5,6,6,1 1,2,3,3,4,4,2,5,5,6,6,1,又有 u = 3 , v = 6 , L [ u ] = 3 , R [ u ] = 4 , L [ v ] = 10 , R [ v ] = 11. u=3,v=6,L[u]=3,R[u]=4,L[v]=10,R[v]=11. u=3,v=6,L[u]=3,R[u]=4,L[v]=10,R[v]=11.
对应的欧拉序就是 [ R [ u ] , L [ v ] ] [R[u],L[v]] [R[u],L[v]]

蒟蒻zyd:那就转化成欧拉序,然后分情况讨论就珂以了吗qwq?
长者:你们还是 t o o too too y o u n g young young,思考问题的时候都too simple。你看 R [ u ] , L [ v ] R[u],L[v] R[u],L[v]的欧拉序有什么问题?
蒟蒻zyd:欧拉序是 3 , 4 , 4 , 2 , 5 , 5 , 6 3,4,4,2,5,5,6 3,4,4,2,5,5,6……就会出现 4 4 4 5 5 5,而 4 4 4 5 5 5并不在这条链上!
长者:(粤语)当然啦,你会发现,不在这条链上的节点都出现了两次,所以每次加入一个节点的时候要判断它原来有没有在区间内!

蒟蒻zyd方欲行,突然想起一个严重的问题:
蒟蒻zyd:这个区间内怎么没有 1 1 1呢?
长者: 1 1 1就是LCA,肯定是要闷声发大财的……但我看到你这么热情,一句话不说也不好。珂以发现只有当 u u u不是 v v v的祖先的时候,LCA不会被算进去。
所以每次询问的时候判断一下,如果是 u u u不是 v v v祖先的情况,就再把LCA加进去就吼了,计算完答案要把LCA再扔出来,识得唔识得啊?

长者:我今天是作为长者的身份和你讲的树上莫队,你要多提高自己的知识水平,想当年我在IOI考场上AK的时候,当时就念了两句诗,叫……

zyd:什么?

于是蒟蒻zyd又被一股神秘的力量弹了出来……他感受到自己已经失去了大半寿命,记忆中好像只有一副黑框眼镜……

例题:bzoj3757 苹果树qwq

你可能感兴趣的:(C++模板系列)