Câu đố duyệt cây
Đề bài
Mô tả
Cho một cây có gốc gồm đỉnh, đánh số từ đến . Gốc của cây là đỉnh .
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 , hãy tính kỳ vọng của .
Dữ liệu vào
- Dòng đầu chứa số nguyên là số đỉnh của cây.
- Dòng thứ hai chứa số nguyên , trong đó là cha của đỉnh . Khi dòng này rỗng.
Dữ liệu ra
In ra số thực, số thứ là kỳ vọng của .
Đáp án được chấp nhận nếu sai số tuyệt đối hoặc tương đối không vượt quá .
Ràng buộc
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 luôn được duyệt đầu tiên nên . Gốc có con là ; đỉnh được duyệt trước đỉnh khác với xác suất tùy thứ tự, cho kỳ vọng . |
| 3 1 2 |
1.000000 2.000000 3.000000 | Cây là một đường thẳng , thứ tự duyệt cố định. |
Bình luận