Appleman và Cây

Đề bài

Mô tả

Cho một cây có n đỉnh. Một số đỉnh (có ít nhất một) được tô màu đen, các đỉnh còn lại được tô màu trắng.

Xét một tập hợp gồm k (0k<n) cạnh của cây. Nếu xoá k cạnh đó khỏi cây thì cây sẽ tách thành k+1 phần — mỗi phần là một cây con với các đỉnh đã được tô màu.

Hãy đếm số tập cạnh sao cho sau khi xoá, mỗi phần thu được chứa đúng một đỉnh đen. In kết quả theo modulo 109+7.

Dữ liệu vào

  • Dòng đầu chứa một số nguyên n — số đỉnh của cây.
  • Dòng thứ hai chứa n1 số nguyên p0,p1,,pn2 (0pii) mô tả cạnh: đỉnh (i+1) nối với đỉnh pi. Các đỉnh được đánh số từ 0 đến n1.
  • Dòng thứ ba chứa n số nguyên x0,x1,,xn1 (xi{0,1}). Nếu xi=1, đỉnh i màu đen; ngược lại đỉnh i màu trắng.

Dữ liệu ra

Một số nguyên duy nhất — số tập cạnh thoả mãn, lấy modulo 109+7.

Ràng buộc

  • 2n105
  • Có ít nhất một đỉnh được tô màu đen.

Ví dụ

Input Output Giải thích
3
0 0
0 1 1
2 Cây có đỉnh 0 trắng và hai đỉnh đen 1,2 đều nối với 0. Có hai cách: xoá cạnh 01 hoặc xoá cạnh 02 — mỗi cách tách cây thành hai phần, mỗi phần chứa đúng một đỉnh đen.
6
0 1 1 0 4
1 1 0 0 1 0
1 Chỉ có một cách duy nhất xoá đúng tập cạnh để mỗi thành phần chứa đúng một đỉnh đen.
10
0 1 2 1 4 4 4 0 8
0 0 0 1 0 1 1 0 0 1
27 27 tập cạnh phân hoạch cây sao cho mỗi thành phần chứa đúng một đỉnh đen.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0