canuc80k3304·5/50

Cụm Đen Chứa Đỉnh

Nộp bài trên LQDOJ

Bài 33 · Rerooting DP

Bạn được cho một cây gồm đỉnh. Mỗi đỉnh sẽ được tô đen hoặc trắng. Một cách tô được gọi là hợp lệ khi tập các đỉnh đen không rỗng và liên thông.

Với mỗi đỉnh , hãy đếm số cách tô hợp lệ trong đó được tô đen. Vì kết quả có thể rất lớn, chỉ cần in phần dư khi chia cho .

Hai cách tô khác nhau nếu tồn tại ít nhất một đỉnh có màu khác nhau.

Input

  • Dòng đầu chứa hai số nguyên và .
  • Mỗi dòng trong dòng tiếp theo chứa hai số nguyên và , mô tả một cạnh vô hướng của cây.

Output

  • In dòng. Dòng thứ chứa số cách tô hợp lệ có đỉnh màu đen, lấy phần dư theo .

Constraints

  • .
  • ; không nhất thiết là số nguyên tố.
  • và .
  • Các cạnh tạo thành một cây.
  • Mỗi giới hạn trên áp dụng cho một test độc lập.

Scoring

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

Example

Test 1

Input

5 100
1 2
2 3
2 4
4 5

Output

7
12
7
10
6

Giải thích: Có tập đỉnh liên thông chứa đỉnh , tương ứng với cách chọn chính xác các đỉnh màu đen. Với đỉnh , chỉ có tập liên thông chứa nó; các số đều nhỏ hơn nên phần dư không thay đổi.

Lời giải tóm tắt
  • Phân tích: Một cách tô được xác định duy nhất bởi tập đỉnh đen. Với một gốc tạm, down[u] đếm các tập liên thông nằm trong cây con và chứa u. Ở mỗi nhánh con v, ta hoặc không lấy gì, hoặc lấy một tập được đếm bởi down[v], nên xuất hiện thừa số down[v]+1.
  • Thuật toán: Tính down[u] bằng tích các thừa số của con. Khi reroot, tại u dựng tích prefix và suffix của các thừa số con. Nhờ đó, thông tin truyền cho con v là tích của phía cha và mọi con khác v, không cần chia modulo. Đáp án tại u là tích của lựa chọn phía cha với toàn bộ nhánh con.
  • Chứng minh: Một tập liên thông chứa u chọn độc lập ở mỗi nhánh: rỗng hoặc một tập liên thông chứa đỉnh kề u. Tích các số lựa chọn vì thế đếm đúng và không trùng. Prefix/suffix loại chính xác một nhánh khi truyền qua cạnh, còn thừa số phía cha đại diện cho mọi lựa chọn liên thông ở phần cây còn lại. Do đó đáp án gộp đủ mọi phía quanh từng đỉnh.
  • Độ phức tạp: Thời gian O(n), bộ nhớ O(n).