atcoder#AGC050F. [AGC050F] NAND Tree
[AGC050F] NAND Tree
题目描述
各頂点に または が書かれた木があります。 この木は 個の頂点を持ち、それらには から までの番号が振られています。 各 について、頂点 と頂点 を結ぶ辺が存在します。 頂点 に書かれた数は です。
すぬけ君は、この木に以下の操作を繰り返します。
- 辺を 本選んで縮約し、消された 個の頂点に書かれていた数の NAND を新たな頂点に書き込む。
回の操作後、木は 個の頂点となります。 このような操作の行い方は 通りありますが、そのうち最後の頂点に が書き込まれるものは何通りあるでしょうか。 この答えを で割った余りを計算してください。
输入格式
入力は標準入力から以下の形式で与えられる。
输出格式
答えを出力せよ。
题目大意
一个 个点的树。每个点有点权 或 。
每次可以选择一条边,使两个端点缩成一个点,新点权值为两端点权值 AND 再取反。
一直操作直到只剩一个点。
求有多少种操作方案使最终剩下的点权值为 。输出答案对 取模的值。
4
1 2
2 3
2 4
0 1 1 0
0
4
1 2
2 3
3 4
1 1 0 1
1
20
3 15
1 12
10 16
3 19
5 20
1 9
6 13
14 19
2 4
8 11
12 16
6 20
2 17
16 18
17 19
7 10
16 20
2 20
8 20
1 0 0 1 1 0 1 1 1 0 0 1 0 1 0 1 1 1 0 0
0
提示
注記
- 演算 NAND の定義は次の通りです: $ NAND(0,\ 0)\ =\ NAND(0,\ 1)\ =\ NAND(1,\ 0)\ =\ 1,\ NAND(1,\ 1)\ =\ 0 $.
- 頂点 と頂点 を結ぶ辺を縮約する際は、その辺を取り除くと同時に 頂点を併合します。 縮約後の木において、併合により生まれた頂点と頂点 を結ぶ辺が存在するのは、縮約前の木において と を結ぶ辺または と を結ぶ辺が存在するときであり、またそのときに限られます。
制約
- 入力が表すグラフは木である。
- 入力中の全ての値は整数である。
Sample Explanation 1
通りの操作順のうち 通りで最後の頂点に が書き込まれることがわかります。よって、答えは です。