距离小于k的有多少个点对
题目描述:
给定n个节点组成的树,树有边权,现在给定一个点u和v,dis(u,v)表示u和v节点的最近距离,问dis(u,v)<=k的uv对数,n <= 1万,k不定,权值<=1000。
题解:
第一次从单纯的树形dp转到树的分治.dp的话基本上是从儿子们获取少量的信息,或者是父亲传给儿子们少量的信息.但是这道题需要很多的信息,并且每次从儿子合并到父亲的时候都要基本上是o(n)的时间复杂度,dp的话需要的是o(1).因此用到树的分治.我喜欢点分治.就是先找重心,然后保证每一层差不多是o(n)的就行了.比树形dp的威力更大,因为它允许当前重新遍历所有的节点.
重点:
树的分治
代码: