ABC340G 题解
考虑对每种颜色单独计算答案,枚举颜色 \(col\),设 \(f_u\) 表示选取的点都在 \(u\) 的子树内,且度数小于等于 \(1\) 的点的颜色为 \(col\) 的方案数,有转移方程:
\[f_u=\prod\limits_{v\in son_u}(f_v+1)-[a_u\ne col]
\]
最后答案即为所有 \(f_u\) 的和,特别的,如果 \(u\) 的颜色和 \(col\) 不同,那么还要减去 \(\sum\limits_{v\in son_u}f_v\),这是因为如果此时不能只选择其中一支子树,否则 \(u\) 点的度数为 \(1\),违反题意。
这样做的复杂度是 \(\mathcal{O}(n^2)\) 的,无法通过全部数据。
容易发现,单次 dp 中有不少节点的 \(f\) 值为 \(0\),称颜色为 \(col\) 的点为关键点。
容易发现,只有两两关键点的 LCA 的 \(f\) 值可能不为 \(0\),因此建立这几个关键点的虚树,在虚树上跑 dp 即可。