51nod 1681

Posted Izaya

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51nod 1681相关的知识,希望对你有一定的参考价值。

题目

神犇题解

这题挺神的。。思路很巧妙

首先想到DFS序(毕竟是子树问题),这道题可以转化成:我们对于每一个节点的子树区间去看,两棵树同一节点的这个子树区间有多少个相同元素,设个数为x,那么这个点的贡献为x*(x-1)/2。

现在的问题就是怎么快速求解区间相同元素了。这也是我没想好的地方。我们用每一个点的第一棵树dfs序作为每一个点的权值,用第二个点的dfs序区间建主席树,那么要查询这个个数,就等于在相应的主席树上查找[l,r]区间内的元素有多少个,这样就能解决问题了。

还有一个常数较小,代码量较小的方法,树状数组。(说起来之前有道题也是可以主席树也可以树状数组的)。

在遍历子树之前,我们先算一遍答案为x,添加完子树之后再算一次,这个结果去掉x就是正确答案了。

以上是关于51nod 1681的主要内容,如果未能解决你的问题,请参考以下文章

51Nod——T 1631 小鲨鱼在51nod小学

51nod 1631 小鲨鱼在51nod小学

51nod 1185 || 51nod 1072 威佐夫博弈

51nod 1354:选数字

51nod 1232:完美数

51nod 1240 莫比乌斯函数