hdu6110】的更多相关文章

$n \leq 500000$的树给$m \leq 500000$个路径,$q \leq 500000$个询问每次问一个区间的路径交. 路径交口诀:(前方高能) 判有交,此链有彼祖: 取其交,最深两两祖. 说成人话就是:判两条路径有没有交,只要一条链的lca在另一条链上就一定有交:取两条路径的交,把两条路径的端点两两求出四对lca,最深那两个就是路径交. 证明?我会还用口诀! 由于需要很多很多次查lca,这里用欧拉序+st表求.查区间路径交可以线段树也可以st表,毕竟重复的部分算两次没问题. /…
题目 http://acm.hdu.edu.cn/showproblem.php?pid=6110 分析 注意到,若干条路径的交一定也是条路径 我们可以维护一个线段树,seg[l..r]存着第l条~第r条路径的交(用起点和终点表示即可) 维护的时候就是两个孩子对应的路径求个交作为自己的交 询问的时候也是讲询问分成若干段,然后逐个合并 于是我们只要解决两条路径求交的问题就可以了 设两个lca分别是c1,c2,dep[c1]<=dep[c2] 设a1与a2的lca为d1,设a1与b2的lca为d2,…
#include <cstdio> #include <iostream> #include <cmath> #include <cstring> #include <algorithm> #include <vector> #include <queue> #define fi first #define se second using namespace std; typedef long long LL; typed…