杂题

题意

给定一棵\(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\),这个很简单能维护

posted @ 2020-07-19 09:05  Grice  阅读(80)  评论(0编辑  收藏  举报