今日爽文 重學wqs二分之我是方案構造者

2022-10-08 13:33:14 字數 1069 閱讀 7095

引入:最小度限制生成樹

將連線 \(s\) 的邊稱為白邊。我們人為地控制「最小」生成樹的白邊數量,那麼其權值一定先減小後增大。其中頂點為真正最小生成樹的白邊數量。

發現其有凹凸性,於是考慮 wqs 二分,具體如何操作不再詳細說明,最終複雜度是 \(o(n\log n+n\log w)\)。

除此之外,題目還讓我們判斷無解。怎麼判斷呢?我們都知道最後二分出來的點不一定就是 \(t\),而是長這樣(不用在意為什麼它是凸的):

所以我們找到這裡的 \(l\) 和 \(r\),看看是否有 \(l\leq t\leq r\) 就行啦。

接下來看下一道題:mst company

它要求我們在上一道題的基礎上輸出方案。

「直接像上題一樣解出答案,然後算一遍不就可以了嗎?」

我該怎麼保證一定有 \(t\) 條白邊而不是 \(l\) 或者 \(r\) 條?

接下來介紹一種方法:

先貼著下界(\(l\))做一次,算出哪些白邊是一定要的(必要白邊)。然後貼著上界(\(r\))做一次,算出最多有多少條白邊。

定義 \(f_i\) 為保證最小生成樹的情況下,最多有多少條權值 \(>i\) 的白邊能在生成樹中。\(f_i\) 可以在貼上界的時候算出。

然後重新貼下界(\(l\))做一次,按邊權從小到大加入。假設現在邊權為 \(i\),白邊數量為 \(now\),並且已經算了邊權為 \(i\) 的必要白邊。那麼只要 \(now+f_i,我就加一條邊權為 \(i\) 的非必要白邊,知道無邊可加或者 \(now+f_i=t\)。

容易知道,這樣構造一定能構造出一種白邊數量為 \(t\) 的最小生成樹。

注意前面要像上道題一樣判無解。

歡迎糾錯與指正,但我並不保證我能完全理解以及回答你們的問題。

感謝 @jiqimao 及其部落格。

今日如此種種,盡在我殤 文 古心老鷹

今日如此種種,盡在我殤文 古心老鷹 不知道為什麼,殤這個字我一直都不是很明白他的意思,一直到了一天看到乙個叫做秦殤的遊戲,還有後來我在公尺蘭論壇群裡請教筆記,我才知道殤,就是死得早.前記 往日如我,年少不經,漠視真情如草,無事自尋煩惱 今日如我,不在年少,憾視真心逸去,不想再空嗟嘆.今日如此種種不痛...