1. 程式人生 > 其它 >2021.12.23 模擬賽

2021.12.23 模擬賽

半個小時補覺;一個小時寫完拍完 T1;三個小時盯著 T2T3 罰坐。

T1 「JOISC 2016 Day 4」最差記者 2

最大化同色對數。

每個 \(A_i\) 可以匹配的是 \(B\) 中的一個字首,設為 \(1\dots f_i\)

按權值從大到小考慮,\(A_i\)\(B_{1\dots f_i}\) 中找一個同色並且未匹配過的 \(B_j\) 匹配。如果找不到,意味著 \(A_i\) 需要改變顏色,具體改變成什麼顏色取決後面的元素,只需要保證任意時刻 \(A_i\) 能夠匹配的 \(B\) 的個數 \(\ge 1\)

那麼維護所有未匹配上的 \(A_i\)\(f_i-i\)

,如果某時刻存在某個 \(f_i-i=0\),意味著 \(A_i\) 匹配的位置確定,並且 \(B_{1\dots f_i}\) 不能夠再被後面的 \(A\) 元素匹配。

每次同色匹配對序列 \(\{f_i-i\}\) 造成的影響是區間 \(-1\),用線段樹維護,支援查詢最小值及其最右位置。

複雜度 \(\mathcal O(n\log n)\)

T2 AGC028D - Chords

計數所有方案的連通塊個數,有兩種方式:

  • 一種是同時維護所有方案連通塊個數的 \(0\) 次和和 \(1\) 次和,問題在於 \(0\) 次和(方案數)並不好計算(我只 yy 出了 \(\mathcal O(n^4)\)
    做法,並且難以處理給出的定邊)。
  • 另一種方式是有意地重複計算每個方案,在每個連通塊處統計一次所在方案。或者理解為計算貢獻。

\(1,2n\) 處斷開,一個方案的所有連通塊,只存在並列或包含的關係。一個連通塊的貢獻,在連通塊點集的編號最小點和編號最大點組成點對 \((l,r)\) 處統計。

\(f(l,r)\) 表示只考慮區間 \([l,r]\) 內所有點,\(l,r\) 連通的方案數。\(l,r\) 連通的限制,用容斥處理,列舉 \(l\) 所在連通塊的最大編號,\(f(l,r)\) 可以遞迴地表示。

那麼 \(f(l,r)\) 乘上 \([l,r]\) 以外隨意連的方案數,就是包含連通塊 \((l,r)\)

的方案數。

複雜度 \(\mathcal O(n^3)\)

將來的自己沒看懂的話,想一想方案、連通塊、點對之間的對映關係。

T3 ARC101E - Ribbons on Tree

容斥,欽定一個邊集不被染色,那麼樹會分裂成若干小連通塊,每個小連通塊隨意匹配。

每個不被染色的邊貢獻 \(-1\) 的容斥係數,樹形 DP,記 \(f(u,i)\) 表示 \(u\) 子樹中,\(u\) 所在連通塊大小為 \(i\)\(u\) 所在連通塊以外的貢獻。

轉移就是樹上揹包的合併,同時考慮一下是否形成新的連通塊。

複雜度 \(\mathcal O(n^2)\)


好好反思 T3 為什麼沒想出來。