[CF1718D] Permutation for Burenka 瞎扯

ImALAS發表於2024-04-08

嘗試回到 1, 2 月份的文風。

感覺,自己思考的時候最好不要亂走,模擬一下考場上的氛圍和緊張感,讓自己保持專注。

但是當你已經瞭解了這個問題的全貌後,隨機遊走一會,仔細觀察問題,梳理思路,感覺收穫會比較大。

所以看起來我不擅長自己想題,比較擅長馬後炮。

[CF1718D] Permutation for Burenka *3300

轉化條件,顯然題中描述的就是兩個序列的笛卡爾樹同構。

現在問題轉化為:把 \(s\) 和一個未知的 \(d\) 填進去,讓你 判定 是否存在合法方案。

對於判定問題,我目前知道的思路:

  • 歸納 / 貪心構造。
  • 擬合幾個必要條件,嘗試證明其充分性。
  • 對於存在較明顯過程性的題目,嘗試刻畫其最終局面。
  • dp 套 dp 那樣的判定。似乎可以說是自動機。

初看這個問題我們無從下手,此時我們有一些基本的手段:

  • 列出有效資訊。本題中我可以知道笛卡爾樹上每個節點填的範圍 \([l_i, r_i]\)
  • 問題特殊化,考慮一條鏈上的情況,我們可以發現兩件事情:
    1. 一個粗略的判定方法:對於連續的一段空白點,其對應的值域上 \(s\) 中是否存在相同數量的對應的點。允許一次判定失敗。
    2. \(d\) 的取值範圍是一段區間。

對於第 2 個性質,我們可以直接猜測,這個結論在原問題上同樣成立。

對於第 1 條,我們發現並不好遷移到樹上,但是本身問題不大,於是我們考慮 找等價表述

然後我們又有一個方法是 交換維度考慮。剛剛從樹上的角度,現在我們從 \(s\) 的角度想,問題表述為:每個 \(s\) 都能找到一個對應的 \(s_i\in [l_j,r_j]\)。也就是 匹配

這顯然是個必然條件。它充分嗎?是的。證明:考慮調整法。不合法的位置必然相鄰,而相鄰位置限制必然相同。於是我們不斷交換直至合法即可。

抽象模型,考慮這個二分圖匹配怎麼做,如果給定 \(d\) 我們有經典貪心:區間按 \(r\) 排序後能選就選。

還剩一個問題:\(d\) 的取值範圍到底怎麼求。

事實上 \(d\) 取值是一段區間有若干種理解方式,比如匹配到最後剩下一個區間的交,以及 \(+1,-1\) 之類的調整結合貪心過程理解。

嚴謹的證明要透過二分圖。完美匹配問題考慮 Hall 定理描述。Hall 定理思考的一個 trick 是 優先選自由度高的一方。比如這個題,兩邊分別是點和區間,應該思考區間。

對 Hall 定理熟悉的話應該瞭解這種分析方法:我們列舉一段區間 \([L, R]\),如果有完美匹配那麼 \(|\{i|[l_i, r_i]\subseteq [L, R]\}|\le |\{i|s_i\in [L, R]\}|\)

定義 \(F(L,R)\) 為這一串式子。由於沒有完美匹配,存在 \(l,r\) 使得 \(F(l,r)=1\),那麼 \(d\) 必然在所有這些 \([l,r]\) 的交的範圍內。得證。

哦其實還有 \(F(l,r)>1\) 的,這種平凡情況直接判了就好。

所以我們知道的 \(d\) 的求法,按 \(r\) 升序,\(l\) 降序分別求解一次,即得 \([L, R]\)

唉但是感覺這類貪心題還是強行掃描線 + 線段樹維護來的舒服啊。