题目链接
解题方法:LCA
题目分析
题目大意
给定一棵树,每一条边的权值都为1,问给定两个点,到该两点距离相等的点有多少个。
解析
一开始并不那么容易想到用lca解决这个问题。但是转化一下,就变成了lca的问题。
对于树上的任意两个点,他们之间的直接距离为dis,那么很明显dis就是dep[x]+dep[y]-2*dis[lca(x, y)]。当dis为奇数时,我们无法找到两者的中点。dis为偶数时,可以分为两种情况,第一种,dep[x]和dep[y]相等的情况,那么就是除了x和y所在的两个子树的所有节点都可以。另一种是dep[x]>dep[y](同理dep[y]>dep[x]),先找到两者的中间点mid,然后mid的所有子节点的数量减去x所在的mid的子树的节点数量即可。
代码
1 |
|