Câu đố duyệt cây

Đề bài

Mô tả

Cho một cây có gốc gồm n đỉnh, đánh số từ 1 đến n. Gốc của cây là đỉnh 1.

Ta duyệt cây bằng thuật toán DFS ngẫu nhiên sau, bắt đầu từ gốc (gọi dfs(1)):

current_time = 0
dfs(v):
    current_time = current_time + 1
    starting_time[v] = current_time
    xáo trộn ngẫu nhiên danh sách con của v (mỗi hoán vị có xác suất bằng nhau)
    for u in các con của v:
        dfs(u)

Tại mỗi đỉnh, thứ tự duyệt các con được chọn ngẫu nhiên đều trong tất cả các hoán vị. Với mỗi đỉnh i, hãy tính kỳ vọng của starting_time[i].

Dữ liệu vào

  • Dòng đầu chứa số nguyên n là số đỉnh của cây.
  • Dòng thứ hai chứa n1 số nguyên p2,p3,,pn, trong đó pi là cha của đỉnh i. Khi n=1 dòng này rỗng.

Dữ liệu ra

In ra n số thực, số thứ i là kỳ vọng của starting_time[i].

Đáp án được chấp nhận nếu sai số tuyệt đối hoặc tương đối không vượt quá 106.

Ràng buộc

  • 1n105
  • 1pi<i

Ví dụ

Input Output Giải thích
7
1 2 1 1 4 4
1.000000 4.000000 5.000000 3.500000 4.500000 5.000000 5.000000 Đỉnh 1 luôn được duyệt đầu tiên nên starting_time[1]=1. Gốc có 3 con là 2,4,5; đỉnh 4 được duyệt trước đỉnh khác với xác suất tùy thứ tự, cho kỳ vọng 3.5.
3
1 2
1.000000 2.000000 3.000000 Cây là một đường thẳng 123, thứ tự duyệt cố định.

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