#505. [2024-11-13 P4] 操作
[2024-11-13 P4] 操作
【题目描述】
给定一棵树。现在每个点有点权 0 或 1 。
我们可以进行操作, 一次操作可以选择一条边 (u, v) ,如果 u, v 点权相同则同时改变点权,即从 0 变成 1 或从 1 变成 0 。否则不变。
对于序列 s 和 t ,我们定义 f(s, t)为点权序列从 s 变成 t 的最小操作次数,如果无法完成则为 0 。
现在我们给出序列 a 和 b ,我们希望求出 f(a, b) 。可是因为一些原因, a 和 b 的一些位置被抹去了,在输入中用问号代替。现在,我们希望对于所有可能的 (a, b) ,求出 f(a, b) 的和,答案对 10^9 + 7 取模。
【输入格式】
第一行包含一个整数 n,表示树的点数。
接下来 n − 1 行,每行包含两个整数 ui , vi ,表示树的一条边 (ui, vi )。
接下来一行包含一个字符串,第 i 个字符代表ai 的值。
接下来一行包含一个字符串,第 i 个字符代表 bi 的值。
【输出格式】
输出一行一个整数,表示所有可能的 (a, b) 的 f(a, b) 之和对 10^9 + 7 取模的结果。
【样例输入】
3
1 2
2 3
???
???
【样例输出】
16
【数据范围】
对于所有数据, 1 ≤ n ≤ 5 × 10^5, 1 ≤ ui ,vi ≤ n, ai, bi ∈ {0,1,?} 。
子任务 1 ( 10% ): n ≤ 5 。
子任务 2 ( 20% ): n ≤ 300 。
子任务 3 ( 20% ): n ≤ 3000 。
子任务 4 ( 20% ): ai, bi = ? 。
子任务 5 ( 30% ):无特殊限制。