|
|
|
@ -26,9 +26,12 @@ void dfs1(int u, int fa) {
|
|
|
|
|
int v = e[i];
|
|
|
|
|
if (v == fa) continue;
|
|
|
|
|
dfs1(v, u);
|
|
|
|
|
f[u] = f[u] * (f[v] + 1) % mod;
|
|
|
|
|
f[u] = f[u] * (f[v] + 1) % mod; // 全白也是一种方案,对于v子树而言,它并不是只能提供以v染成黑色的所有方案,还有一种:v没有染成黑色的方案数。
|
|
|
|
|
// 而此时,由于v没有染成黑色,所以,v子树就没有进去染色,也就是整个v子树全都是白色,这算是一种特殊的染色方案,也就是啥都不染。
|
|
|
|
|
// 所以 f[v]+1 就是v子树的所有贡献值,而f[u]需要把自己所有儿子的共献值累乘起来才是自己的贡献值。
|
|
|
|
|
son.push_back(v); // 将子节点加入集合,方便之后操作
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int t1 = 1; // 前缀积取模后的值
|
|
|
|
|
int t2 = 1; // 后缀积取模后的值
|
|
|
|
|
|
|
|
|
|