atcoder#AGC050F. [AGC050F] NAND Tree

[AGC050F] NAND Tree

配点 : 20002000

問題文

各頂点に 00 または 11 が書かれた木があります。 この木は NN 個の頂点を持ち、それらには 11 から NN までの番号が振られています。 各 ii について、頂点 aia_i と頂点 bib_i を結ぶ辺が存在します。 頂点 ii に書かれた数は cic_i です。

すぬけ君は、この木に以下の操作を繰り返します。

  • 辺を 11 本選んで縮約し、消された 22 個の頂点に書かれていた数の NAND を新たな頂点に書き込む。

N1N - 1 回の操作後、木は 11 個の頂点となります。 このような操作の行い方は (N1)!(N-1)! 通りありますが、そのうち最後の頂点に 11 が書き込まれるものは何通りあるでしょうか。 この答えを 2 で割った余りを計算してください。

注記

  • 演算 NAND の定義は次の通りです: $NAND(0, 0) = NAND(0, 1) = NAND(1, 0) = 1, NAND(1, 1) = 0$.
  • 頂点 ss と頂点 tt を結ぶ辺を縮約する際は、その辺を取り除くと同時に 22 頂点を併合します。 縮約後の木において、併合により生まれた頂点と頂点 uu を結ぶ辺が存在するのは、縮約前の木において ssuu を結ぶ辺または ttuu を結ぶ辺が存在するときであり、またそのときに限られます。

制約

  • 2N3002 \leq N \leq 300
  • 1ai<biN1 \leq a_i < b_i \leq N
  • 入力が表すグラフは木である。
  • 0ci10 \leq c_i \leq 1
  • 入力中の全ての値は整数である。

入力

入力は標準入力から以下の形式で与えられる。

NN

a1a_1 b1b_1

::

aN1a_{N-1} bN1b_{N-1}

c1c_1 c2c_2 \cdots cNc_N

出力

答えを出力せよ。

4
1 2
2 3
2 4
0 1 1 0
0

66 通りの操作順のうち 44 通りで最後の頂点に 11 が書き込まれることがわかります。よって、答えは 4 mod 2=04 \ mod \ 2 = 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