canuc80k7516·17/20

Nhảy Xuống Lá

Nộp bài trên LQDOJ

Bài 75 · Li Chao Tree

Cho một cây đỉnh, được gốc hóa tại đỉnh . Mỗi đỉnh có hai số nguyên và .

Từ một đỉnh không phải lá, bạn được nhảy thẳng tới một đỉnh bất kỳ là hậu duệ nghiêm ngặt của , tức nằm trong cây con của và . Chi phí của bước nhảy là . Từ , bạn tiếp tục nhảy theo cùng quy tắc cho đến khi tới một lá.

Một đỉnh khác gốc là lá khi nó không có con. Đỉnh gốc không được xem là lá nếu cây có nhiều hơn một đỉnh, kể cả khi bậc của nó bằng .

Với mỗi đỉnh , hãy tìm tổng chi phí nhỏ nhất để bắt đầu tại và kết thúc ở một lá trong cây con của . Với một đỉnh lá, chi phí bằng vì không cần thực hiện bước nhảy nào.

Input

  • Dòng đầu chứa số nguyên .
  • Dòng thứ hai chứa số nguyên .
  • Dòng thứ ba chứa số nguyên .
  • Trong dòng tiếp theo, mỗi dòng chứa hai số nguyên , mô tả một cạnh của cây.

Output

  • In số nguyên trên một dòng. Số thứ là chi phí nhỏ nhất khi bắt đầu tại đỉnh .

Constraints

  • .
  • .
  • Các cạnh tạo thành một cây.

Scoring

  • Subtask ( số điểm): .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

6
4 -2 3 5 1 7
2 6 -1 4 3 -5
1 2
1 3
2 4
2 5
3 6

Output

-20 -8 -15 0 0 0

Giải thích: Các đỉnh là lá nên có chi phí . Từ đỉnh , nhảy thẳng tới tốn ; từ đỉnh , lựa chọn tốt nhất là nhảy thẳng tới , tốn .

Lời giải tóm tắt
  • Ý tưởng: Đặt dp[u] là chi phí nhỏ nhất từ u tới một lá trong cây con. Với lá, dp[u]=0. Với đỉnh không phải lá:
  • Ý tưởng: dp[u] = min_{v là hậu duệ nghiêm ngặt của u}(dp[v] + a_u·b_v).
  • Ý tưởng: Mỗi hậu duệ v tạo đường y=b_v·x+dp[v]; cần lấy minimum tại x=a_u. Xử lý các đỉnh theo thứ tự hậu tố của DFS. Mỗi cây con giữ một Li Chao Tree chứa đường của toàn bộ đỉnh trong cây con đó. Trước khi tính dp[u], hợp nhất các cây của mọi con, nên cấu trúc chứa đúng các hậu duệ nghiêm ngặt của u; sau khi truy vấn mới chèn đường của chính u.
  • Ý tưởng: Hai Li Chao Tree động được hợp bằng cách duyệt các node của một cây và chèn các đường sang cây còn lại. Việc nhập trực tiếp các nhánh rỗng và giới hạn độ sâu theo miền [-100000,100000] giữ tổng công việc trong O(n log²C), với C=200001; bộ nhớ O(n log C).