canuc80k3101·2/50

Sơ Đồ Cấp Dưới

Nộp bài trên LQDOJ

Bài 31 · Euler Tour

Một công ty có nhân viên, được đánh số từ đến . Nhân viên là tổng giám đốc. Mỗi nhân viên từ đến có đúng một người quản lý trực tiếp; toàn bộ quan hệ quản lý tạo thành một cây gốc tại nhân viên .

Một nhân viên là cấp dưới của nhân viên khi đi liên tiếp qua một hoặc nhiều quan hệ quản lý trực tiếp từ sẽ tới . Vì vậy, nhân viên được xét không phải là cấp dưới của chính mình.

Với từng nhân viên, hãy tính tổng số cấp dưới trực tiếp hoặc gián tiếp của họ.

Input

  • Dòng đầu chứa số nguyên .
  • Nếu , dòng tiếp theo chứa số nguyên. Với mỗi từ đến , số thứ là chỉ số người quản lý trực tiếp của nhân viên .

Output

  • In số nguyên trên một dòng. Số thứ là số cấp dưới trực tiếp hoặc gián tiếp của nhân viên .

Constraints

  • .
  • Mỗi chỉ số quản lý nằm trong đoạn từ đến .
  • Các quan hệ quản lý tạo thành một cây gốc tại nhân viên .
  • Chỉ số của người quản lý không nhất thiết nhỏ hơn chỉ số của cấp dưới.

Scoring

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

Example

Test 1

Input

7
1 1 3 3 5 1

Output

6 0 3 0 1 0 0

Giải thích: Nhân viên quản lý cây con gồm , nên có ba cấp dưới; nhân viên chỉ có nhân viên ở dưới quyền. Tổng giám đốc có cả sáu người còn lại.

Lời giải tóm tắt
  • Phân tích: Trong DFS theo cây quản lý, toàn bộ cây con của một nhân viên được xử lý liền nhau. Số cấp dưới của v chính là kích thước cây con gốc v trừ đi một cho chính v.
  • Thuật toán: Dựng danh sách con từ mảng quản lý trực tiếp. Duyệt lặp từ gốc 1 để tạo một thứ tự mà cha luôn đứng trước con. Khởi tạo kích thước mỗi cây con bằng 1, rồi xét các đỉnh theo thứ tự ngược và cộng kích thước của từng con vào cha. Cuối cùng in size[v]-1.
  • Chứng minh tính đúng đắn: Một lá có kích thước cây con bằng 1, nên có 0 cấp dưới. Giả sử kích thước cây con của mọi con trực tiếp của v đã đúng. Các cây con ấy rời nhau và cùng với v tạo đúng cây con của v, nên phép cộng 1 + sum(size[child]) cho kích thước chính xác. Xét ngược thứ tự DFS bảo đảm giả thiết này đúng trước khi xử lý mỗi cha. Trừ chính v cho đúng số cấp dưới trực tiếp hoặc gián tiếp.
  • Độ phức tạp: Thời gian O(n), bộ nhớ O(n).