trang chủ / bài tập / applmtree

Cây của Appleman

Đề bài

Mô tả

Cho một cây có n đỉnh được đánh số từ 0 đến n1. Mỗi đỉnh được tô màu đen hoặc trắng, và đảm bảo có ít nhất một đỉnh đen.

Xét một tập gồm k cạnh của cây (0k<n). Khi xóa k cạnh này khỏi cây, cây sẽ bị tách thành k+1 thành phần liên thông (mỗi thành phần cũng 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 xóa, mỗi thành phần liên thông 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 số nguyên n — số đỉnh của cây.
  • Dòng thứ hai chứa n1 số nguyên p0,p1,,pn2 (0pii), trong đó pi nghĩa là có một cạnh nối đỉnh i+1 với đỉnh pi.
  • Dòng thứ ba chứa n số nguyên x0,x1,,xn1 (xi{0,1}). Nếu xi=1 thì đỉnh i màu đen, ngược lại màu trắng.

Dữ liệu ra

Một số nguyên duy nhất — số tập cạnh hợp lệ theo modulo 109+7.

Ràng buộc

  • 2n105
  • Có ít nhất một đỉnh đen.

Ví dụ

Input Output Giải thích
3
0 0
0 1 1
2 Cây có 3 đỉnh: đỉnh 0 nối với 1 và 2. Đỉnh 0 trắng, đỉnh 1 và 2 đen. Có hai cách: (1) xóa cạnh (0,1) và (0,2) thành 3 thành phần — không hợp lệ vì đỉnh 0 không có đen; (2) xóa cạnh (0,1) → {0,2} và {1}; (3) xóa cạnh (0,2) → {0,1} và {2}. Hai cách (2) và (3) hợp lệ.
6
0 1 1 0 4
1 1 0 0 1 0
1 Chỉ có một cách chia hợp lệ.
10
0 1 2 1 4 4 4 0 8
0 0 0 1 0 1 1 0 0 1
27 Có 27 cách phân hoạch hợp lệ.

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