USACO 2022 US Open Contest, Gold, Balancing a Tree

Xem PDF



Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, Output, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 2200 (p) Thời gian: 2.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Nông dân John đã tiến hành một nghiên cứu về sự tiến hóa của các giống bò khác nhau. Kết quả là một cây có gốc với \(N\) (\(1 \leq N \leq 10^5\)) nút đánh số từ \(1\) đến \(N\), mỗi nút tương ứng với một giống bò. Với mỗi \(i \in [2, N]\), nút cha của \(i\) là nút \(p_i\) (\(1 \leq p_i < i\)), nghĩa là giống \(i\) tiến hóa từ giống \(p_i\). Nút \(j\) được gọi là tổ tiên của nút \(i\) nếu \(j = p_i\) hoặc \(j\) là tổ tiên của \(p_i\).

Mỗi nút \(i\) tương ứng với giống bò được gán số nguyên \(s_i\). Sự "mất cân bằng" của cây là giá trị lớn nhất của \(|s_i - s_j|\) trên tất cả các cặp nút \((i, j)\) với \(j\) là tổ tiên của \(i\).

Nông dân John không biết giá trị chính xác của \(s_i\) của mỗi giống, nhưng ông biết giới hạn dưới và giới hạn trên của những giá trị này. Công việc của bạn là gán giá trị nguyên của \(s_i \in [l_i, r_i]\) (\(0 \leq l_i \leq r_i \leq 10^9\)) cho mỗi nút sao cho sự mất cân bằng của cây là nhỏ nhất.

Input

  • Dòng đầu tiên chứa số \(T\) (\(1 \leq T \leq 10\)) - số lượng bộ dữ liệu, và số nguyên \(B \in \{0, 1\}\).
  • Với mỗi bộ dữ liệu:
    • Dòng đầu tiên chứa số \(N\), sau đó là \(N-1\) số nguyên \(p_2, p_3, \dots, p_N\).
    • \(N\) dòng tiếp theo, mỗi dòng chứa hai số nguyên \(l_i, r_i\).
  • Dữ liệu đảm bảo tổng \(N\) của tất cả các bộ dữ liệu không vượt quá \(10^5\).

Output

Với mỗi bộ dữ liệu, in ra \(1\) hoặc \(2\) dòng dựa vào giá trị của \(B\):

  • Dòng đầu in ra độ mất cân bằng nhỏ nhất.
  • Nếu \(B = 1\), dòng thứ \(2\) in ra \(N\) số nguyên \(s_1, s_2, \dots, s_N\) cách nhau bởi dấu cách.

Example

Test 1

Input
3 0
3
1 1
0 100
1 1
6 7
5
1 2 3 4
6 6
1 6
1 6
1 6
5 5
3
1 1
0 10
0 1
9 10
Output
3
1
4
Note

Đối với test đầu tiên, độ mất cân bằng nhỏ nhất là \(3\). Một cách để đạt được là \([s_1, s_2, s_3] = [4, 1, 7]\).

Test 2

Input
3 1
3
1 1
0 100
1 1
6 7
5
1 2 3 4
6 6
1 6
1 6
1 6
5 5
3
1 1
0 10
0 1
9 10
Output
3
3 1 6
1
6 5 5 5 5
4
5 1 9
Note

Đối với test đầu tiên, độ mất cân bằng nhỏ nhất là \(3\). Một cách để đạt được là \([s_1, s_2, s_3] = [3, 1, 6]\).

Scoring

  • Subtask \(1\) (\(20\%\) số điểm): \(l_i = r_i\) với mọi \(i\).
  • Subtask \(2\) (\(20\%\) số điểm): \(p_i = i - 1\) với mọi \(i\).
  • Subtask \(3\) (\(60\%\) số điểm): Không có điều kiện gì thêm.
  • Với mỗi subtask, một nửa số điểm sẽ có \(B = 0\), nửa còn lại sẽ có \(B = 1\).

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: