暴力枚举每个点
i
i
i,判断
L
C
A
(
a
,
b
)
LCA(a,b)
LCA(a,b)是否=
c
c
c。复杂度
O
(
n
⋅
q
⋅
l
o
g
2
(
n
)
)
O(n·q·log_2(n))
O(n⋅q⋅log2(n)),用脚想想都知道过不了(能骗一分是一分)
貌似可以用那几个特殊数据小搞一波,估计比暴力多个10分吧。(一分也是分)
说说正解: 首先,我们假设结点1为树根,敲一遍
D
F
S
DFS
DFS和
L
C
A
LCA
LCA的预处理 设dp[x]为以x为根的子树的节点数。 总共有四种情况: 1.
c
c
c不在
a
=
>
b
a=>b
a=>b的路径上,此时答案为0. 2.
c
c
c是
a
,
b
a,b
a,b的
L
C
A
LCA
LCA,此时答案为c与其祖先们的节点。
重点来袭
c为a~LCA(a,b)路径上的一点,此时
a
n
s
w
e
r
answer
answer=dp[c]-dp[v] v表示v为a所在子树的根节点(以c为树根时)
c为b~LCA(a,b)路径上的一点,此时
a
n
s
w
e
r
answer
answer=dp[c]-dp[v] v表示v为b所在子树的根节点(以c为树根时)