1. 程式人生 > 其它 >AGC004 部分簡要題解

AGC004 部分簡要題解

感覺 F 非常 nb!

E

首先問題可以轉化為:每次將出口帶著邊界走,出了邊界的機器人立馬消失,最大化出口碰到的機器人數量。

考慮哪些機器人是已經出界了的,不難有觀察:

  • 當前出界的機器人只與當前出口往四個方向走過的最遠距離有關。

下面令往上下左右分別 至多 走了 \(u, d, l, r\) 步,那麼當前已經出界的機器人如下圖所示(紅色部分):

於是自然的想法是令 \(f_{u, d, l, r}\) 表示當前機器人往上下左右至多走了 \(u, d, l, r\) 步後能碰到的最多機器人數。

轉移只需要考慮往四個方向多擴充套件一步即可,顯然能擴充套件得到的機器人都要全部碰到最優,複雜度 \(\mathcal{O}(n ^ 4)\)

F

首先考慮樹的情況。

這個問題直接做無法下手,也無法得到有效的觀察,考慮轉化該問題。

回想曾遇到過的 兩色模型,同時注意到樹是一個二分圖,每次操作的兩個點一定在二分圖上的兩部,感覺很有前途,於是不妨將問題往二分圖上轉化。

首先將這顆樹進行黑白染色,於是每次操作可以轉化為:在兩部選擇一對有邊相接且顏色不同的點 \((u, v)\),將兩者顏色翻轉,求最少的次數使得兩部顏色全部翻轉。

兩部點對 \((u, v)\) 顏色不同當且僅當被操作的次數奇偶性相同等價於原問題上顏色相同。

於是這個問題有解就存在一個必要條件:兩部的大小相等,於是先把不等的情況判掉。

此時發現這個問題還是不好解決,考慮進一步轉化這個問題。

注意到每次涉及到交換的兩點必定一白一黑,於是交換操作可以視作是一個黑點往相鄰的白點移動。

因此問題可以等價於:二分圖上左部上每個點有一個黑子,右部上每個點是空的,黑子可以向一個空點移動,問左部黑子全部移動到右部的最小代價。

於此同時,我們注意到所有黑子都是等價的,因此如果黑子想要越過黑子可以 調整 為將當前黑子和越過的黑子整體向前進的方向平移一位,因此 黑子每次必須移動到空點的限制就去除了(一個點上可以有多個黑子)。

於是現在的問題可以再次被轉化為:在黑子和空點之間匹配,兩點匹配的代價是在樹上的距離,最小化匹配的代價。

答案考慮每條邊的貢獻,顯然是黑子比空點多的一邊需要經過這條邊,且下界顯然是可以達到的,於是樹的情況就解決了。


接下來考慮基環樹的情況,因為樹的做法需要依賴於二分圖的性質,因此我們還需分環的奇偶性討論。

首先來考慮偶環的情況,此時依然滿足二分圖的性質。

繼續考慮每條邊對答案的貢獻,容易發現樹邊貢獻不變。

對於環上的邊,注意到黑子與白點匹配時一定不存在某條邊在匹配路徑上被雙向經過,因此我們先給環上的邊定向,經過次數的符號代表環在匹配路徑上的方向。

容易發現相鄰兩邊的差值是確定的,因為中間點子樹內需要的黑點數量(帶符號)確定。

除此之外並無其他限制,具體地,我們令環上的邊經過次數分別為 \(x_1 \sim x_k\)(欽定環方向 \(i \to i + 1, k \to 1\)),環上點子樹內需要黑點數量分別為 \(d_1 \sim d_k\),那麼有:

\[\begin{cases} x_k - x_1 = d_1 \\ x_1 - x_2 = d_2 \\ \ \ \vdots \\ x_{k - 1} - x_k = d_k \end{cases} \]

這是一個 經典問題,容易注意到 \(x_{2 \sim k}\) 能被 \(x_1\) 線性表出,因此最終最小化的函式可以形式化描述為(其中 \(c\) 序列均為常數):

\[\sum\limits_{i = 1} ^ k |x_1 - c_i| \]

這也是一個經典問題,選取 \(c\) 的中位數即可。


對於奇環的情況,相當於是在同部之間加上了一條邊,考慮修改最初始的轉化。

對於不同部的點依然是顏色不同才可以交換顏色,對於同部點只能是顏色相同才可以交換顏色。

以下不妨令同部點在左部,且標號為 \(x, y\)

注意到每次 \(x, y\) 只能將兩個空點生成兩個黑點,或將兩個黑點吞掉變成兩個空點。

因此此時問題有解存在必要條件:兩部點的數量奇偶性相同。

於此同時,注意到此時同樣滿足黑點自由移動的調整,因此我們可以一開始就將缺失 / 多餘的黑點生成,於是問題就轉化為樹的帶權情況。

不難發現解決方法是一樣的,因此這題就做完了,容易發現每一步複雜度均為 \(\mathcal{O}(n)\)

GO!