题意
给定一棵\(n\)个点的树,每个点有颜色\(c_i\)
两条不相交的路径\((a,b)(c,d)(均不相同)\),满足\(c_a=c_b,c_c=c_d\)为合法方案
\((a,b)(c,d)=(c,d)(a,b)\)
\(q\)次询问,每次给定\(x\),求不以\(x\)为端点的合法方案
\(n,q\le 10^5\)
做法
对于\((a,b)(c,d),在四个点上都统计一次,\)令\(ans_i\)为\(i\)作为端点,\(Ans=(\frac{1}{4}\sum ans_i)-ans_x\)
考虑枚举\(x,y\),\(x-y\)路径子树内的路径是所有与其不相交的路径
显然,我们考虑点分治,令\(G\)为当前点分中心,我们对跨子树的点对 及 \(G\)与其他点对处理
\(G\)与其他点对很好做,我们具体来做跨子树的点对
\(x-G-y\)
- 令\(sum\)为\(G\)子节点的\(\sum f\)
- 令\(h_x\)为\(x-G\)路径上\(G\)的子节点的\(f\)值
- 令\(g_x\):挨着\(x-G\)路径上的点的\(\sum f\)
那么\((x,y)\)的答案为:\(sum-h_x-h_y+g_x+g_y\),这个很简单能维护