canuc80k7110·11/16

Nhãn Không Tăng Trên Cây

Nộp bài trên LQDOJ

Bài 71 · Lagrange Interpolation

Cho một cây có gốc tại đỉnh . Với mỗi đỉnh , cha trực tiếp của là ; luôn có .

Hãy gán cho mỗi đỉnh một số nguyên thuộc sao cho nhãn của một đỉnh không lớn hơn nhãn của cha nó. Đếm số cách gán nhãn, lấy dư theo .

Input

  • Dòng đầu chứa hai số nguyên .
  • Nếu , dòng tiếp theo chứa số nguyên .

Output

  • In số cách gán nhãn hợp lệ modulo .

Constraints

  • .
  • .
  • với mọi .

Scoring

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

Example

Test 1

Input

1 4

Output

4

Giải thích: Cây chỉ có đỉnh gốc, nên có thể chọn một trong bốn nhãn.

Test 2

Input

3 2
1 1

Output

5

Giải thích: Nếu gốc mang nhãn thì hai con đều phải mang nhãn ; nếu gốc mang nhãn thì mỗi con có hai lựa chọn, tổng cộng cách.

Lời giải tóm tắt
  • Ý tưởng: Với mỗi đỉnh u, đặt F_u(x) là số cách gán nhãn trong cây con của u khi nhãn của u không vượt quá x. Nếu nhãn của u bằng đúng s, mỗi cây con gốc v có F_v(s) cách và các cây con độc lập. Do đó
  • Ý tưởng: [ F_u(x)=\sum_{s=1}^{x}\prod_{v\text{ là con của }u}F_v(s). ]
  • Ý tưởng: Quy nạp theo cây cho thấy F_u là đa thức có bậc bằng số đỉnh trong cây con của u. Vì vậy chỉ cần tính F_1(0),...,F_1(N) rồi nội suy tại D.
  • Ý tưởng: Ta duyệt x=1..N; tại mỗi x, xử lý đỉnh theo thứ tự giảm dần. Vì p_v<v, mọi con của u đã được tính tại cùng x.
  • Ý tưởng: Độ phức tạp là O(N^2) thời gian và O(N^2) bộ nhớ.