题意:给一个无向图,询问给一个点集 S S S,可以摧毁图中 S S S以外的任意一个点,求隔开 S S S中的随便两个点的方案数,多次询问, ∑ ∣ S ∣ \sum |S| ∑∣S∣和 n n n同阶
考虑圆方树,将两个点割开的方案即为摧毁两个点(圆方树)路径上的任意一个点,所以将两个点割开的方案数即为两点路径上的圆点个数
统计圆点个数可以将点权放置边权,圆点->父亲边权为1,方点->父亲边权为0,预处理 f x f_x fx表示 x x x到根的边权和, ( u , v ) (u,v) (u,v)路径的权值即为 f u + f v − 2 ⋅ f l c a f_u+f_v-2\cdot f_{lca} fu+fv−2⋅flca
最终答案即为询问点构成的虚树的边权和,按 d f s dfs dfs序排序,然后 a n s = ∑ 1 ∣ S ∣ d i s ( S i , S i + 1 ) 2 + [ l c a ( S ) 为 圆 点 ] ans=\frac{\sum_1^{|S|} dis(S_i,S_{i+1})}2+[lca(S)为圆点] ans=2∑1∣S∣dis(Si,Si+1)+[lca(S)为圆点](假设 S ∣ S ∣ + 1 = S 1 S_{|S|+1}=S_1 S∣S∣+1=S1)