/*51 nod 1681 公共祖先 (主席树+dfs序)problem:给你两棵树, 两个节点之间的值定义为在两个棵树中有多少一直是它们的公共祖先求任意两个点的亲密度的总和solve:问题可以转换成每个点能够成为多少次公共祖先. 如果lca一直是a,b的公共祖先, 那么a,b一定在lca的子树中. 所以找出两棵树中lca点的子树中的相同点的个数,就能计算出多少对点在两棵树中都有lca这个公共祖先.先处理出a树的dfs序,然后用其作为b树中dfs序的值. 在a树中,如果u在lca的子树中,那么它的序号大于dfa[lca]小于等于eda[lca],即进出值. 所以在b树的lca的子树中找出序号在[dfa[lca],eda[lca]]之间的个数(可以主席树维护), 就是lca子树所含相同点的个数.hhh-2016/09/16-11:36:14*/#pragma comment(linker,"/STACK:124000000,124000000")#include #include #include #include #include #include #include #include #include #include