LY1155 [ 20230320 CQYC省選模擬賽 T2 ] 草

cxqghzj發表於2024-03-08

題意

定義一個數列 \(a\) 是好的,滿足 \(\forall i \in [0, k], a_i = \sum_{j = 0} ^ k [a_j == i]\)

對於一棵樹,求出多少滿足權值好的數列。

Sol

yy一下感覺好的序列不會很多。

寫個 \(dfs\) 搜出 \(k \le 8\) 的所有的好的序列。

發現一個數列是好的當且僅當:

  • \(a = 1, 2, 1, 0\)
  • \(a = 2, 0, 2, 0\)
  • \(a = 2, 1, 2, 0, 0\)
  • \(a = k - 4, 2, 1, 0, ..., 1, 0, 0, 0\) (中間省略 \(k - 7\)\(0\))

證明可以自己感性理解下。

前面三個長度 \(O(1)\),直接暴力樹形dp即可。

第四個數列是個經典的點分治。

注意到不好匹配的原因在於中間 \(O(n)\) 級別的 \(0\),其實可以考慮用一個並查集來跳 \(0\)

考慮對於每個權值為 \(0\) 的點,對她的父親連一條邊。

這裡似乎只能寫路徑壓縮或者按秩合併。

總複雜度 \(O(n \log ^ 2 n)\)

相關文章