Nâng cấp đường

Đề bài

Mô tả

Một đất nước có n thành phố và n1 con đường hai chiều, từ bất kỳ thành phố nào cũng có thể đi đến mọi thành phố khác chỉ bằng cách di chuyển dọc theo các con đường (nói cách khác, hệ thống đường tạo thành một cây). Các thành phố được đánh số từ 1 đến n.

Ban đầu mọi con đường đều xấu, nhưng chính phủ muốn nâng cấp một số con đường. Người dân sẽ hài lòng nếu, với thủ đô đặt tại thành phố x, đường đi từ x đến mọi thành phố khác đi qua nhiều nhất một con đường xấu.

Với mỗi thành phố x có thể là thủ đô, hãy đếm số cách nâng cấp một tập con các con đường sao cho điều kiện trên được thỏa mãn. Vì kết quả có thể rất lớn, hãy in ra phần dư của nó khi chia cho 109+7.

Dữ liệu vào

  • Dòng đầu chứa số nguyên n, số thành phố.
  • Dòng thứ hai chứa n1 số nguyên dương p2,p3,,pn (1pii1), mô tả các con đường: pi nghĩa là có một con đường nối thành phố pi với thành phố i.

Dữ liệu ra

In ra n số nguyên a1,a2,,an, trong đó ai là số cách nâng cấp cần tìm khi thủ đô đặt tại thành phố i, lấy phần dư cho 109+7.

Ràng buộc

  • 2n2·105
  • 1pii1

Ví dụ

Input Output Giải thích
3
1 1
4 3 3 Cây có gốc là các cạnh 1213. Với thủ đô tại 1, mỗi cạnh có thể tốt hoặc xấu tùy ý: 2×2=4 cách. Với thủ đô tại 2, đường tới 3 đi qua hai cạnh nên tối đa một cạnh được xấu: 3 cách.
5
1 2 3 4
5 8 9 8 5 Cây là một đường thẳng 12345. Khi thủ đô ở đầu mút (thành phố 1 hoặc 5) có 5 cách; ở giữa (thành phố 3) có 9 cách.

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