Đỏ Xanh (Thi thử MTTN 2022)

Xem PDF

Điểm: 100 Thời gian: 2.0s Bộ nhớ: 512M Input: bàn phím Output: màn hình

đề bài mang tính chất không liên quan và không hề mô tả cách quốc hội Hoa Kỳ hoạt động.

Nếu ở một vũ trụ nào đó, the delegate of Bảnh would like to raise an unmoderated caucus to play BlackJack in the UnitedNations,

thì ở thế giới song song năm 2077, Hesll(Hét-xồ) phải ngồi dự khán buổi họp quốc hội Mỹ.

Anh ta đang ngồi nhàn rỗi nhâm nhi ly cà phê ở nơi họp của Hạ viện. Chỗ ngồi của các đại biểu lúc này không còn ngồi theo hình bán nguyệt, mà ngồi theo hình của một cái cây - cụ thể là một đồ thị đơn vô hướng không có chu trình, với mỗi dân biểu ngồi ở một đỉnh.

Dù đã là năm 2077 nhưng cả Quốc hội đến lúc này vẫn không có nỗi một thành viên của đảng thứ ba. Hảo kết quả 🙂

Mỗi dân biểu theo đảng Dân chủ (màu Xanh) hoặc đảng Cộng hòa (màu Đỏ). Hai ông này nhiều ân oán với nhau lắm 🙂

Một nhóm nghị sỹ \(S\) được gọi là ngồi gần nhau, nếu đường đi đơn giữa hai chỗ ngồi bất kỳ trong nhóm đều chỉ đi qua các chỗ ngồi khác cùng nằm trong \(S\).

Một nhóm nghị sỹ được gọi là "có thể thỏa hiệp" nếu họ ngồi gần nhau và số thành viên bên xanh phải bằng số thành viên bên đỏ.

Hạ viện khai mạc, các nghị viên ngân nga giai điệu quốc ca Mỹ.

Sau đó, một dự luật mới được đưa ra để thảo luận. chac cac ban khong biet filibuster la gi dau...

Hesll hỏi ông tiên xem có bao nhiêu nhóm nghị sỹ có thể thỏa hiệp để vui vẻ, hạnh phúc ra về.

Input

  • Dòng đầu tiên là \(n\), biểu thị số lượng nghị sỹ trong Hạ viện \((n \le 2000, n \neq 435)\)
  • Dòng tiếp theo gồm \(n\) số: \(c_1, c_2, \dots, c_n\) biểu thị màu sắc của đảng phải của các nghị sĩ. \(c_i=0\) nếu nghị sĩ thứ i thuộc Dân chủ, \(c_i=1\) nếu là Cộng hòa.
  • \(n - 1\) dòng cuối cùng, mỗi dòng chứa 2 số \(u, v\) biểu thị 1 cạnh của sơ đồ chỗ ngồi.

Output

  • In ra một số duy nhất là đáp án, chia lấy dư cho \(10^9+2277\).

Scoring

  • Subtask #1 (\(40\%\) số điểm): \(n \le 20\)
  • Subtask #2 (\(30\%\) số điểm): \(n \le 200\)
  • Subtask #3 (\(30\%\) số điểm): \(n \le 2000\)

Example

Test 1

Input
5
1 1 0 0 0
1 2
1 3
1 4
1 5
Output
6
Note

Các nhóm nghị sĩ sau thỏa mãn: \([1, 3], [1, 4], [1, 5], [1, 2, 3, 4], [1, 2, 3, 5], [1, 2, 4, 5]\)


Bình luận


  • 2
    letangphuquy    11:34 a.m. 13 Tháng 2, 2022

    Hint: Cải tiến từ subtask 2, chỉ duyệt chiều thứ 2 (biến \(delta\)) chạy từ \(-siz[u]\) tới \(+siz[u]\) với \(siz[u]\) là số nút trong cây con gốc \(u\)


    • 1
      longvu    10:54 a.m. 14 Tháng 2, 2022

      Anh Quý ơi, ?cho em hỏi độ phức tạp bài này nếu duyệt theo cách của anh là bao nhiêu vậy ạ?


      • 1
        letangphuquy    10:55 a.m. 14 Tháng 2, 2022 đã chỉnh sửa

        Cỡ tầm \(O(n^2)\) vì bây giờ mỗi lần duyệt cạnh \((u,v)\) là giống như gộp cây gốc \(v\) vào cây gốc \(u\).


        • 1
          longvu    11:54 a.m. 14 Tháng 2, 2022

          Anh ơi, nhưng nếu cây dạng đường thẳng thì độ phức tạp của nó cũng gần bằng O(n^3) rồi đúng ko anh nhỉ?


          • 2
            letangphuquy    2:48 p.m. 14 Tháng 2, 2022 đã chỉnh sửa

            Cây đường thẳng cũng O(n^2) thôi em :v. Ví dụ 1->2->3->4->5 thì

            • nút 4 duyệt qua nút 5
            • nút 3 duyệt qua 2 nút 4,5
            • nút 2 duyệt qua 3 nút 3,4,5,
            • ....

            Bình thường mình QHĐ trên cây cũng là gộp cây này vào cây kia đó. DFS(u), lúc đầu cây con gốc u có duy nhất một nút u thôi, xong gộp con v của u vào thì được cây con gốc u lớn hơn.