a 國一共有 $n$ 個城市且有 $n-1$ 條雙向道路,且任意兩個城市都可以通過道路互相到達。
現在 b 國給出了兩個城市的集合 $x,y$,你需要摧毀若干條 a 國的道路,使得任意乙個在 x 中的城市無法到達任何乙個 y 中的城市。
現在給定每條道路摧毀需要付出的代價,求乙個代價之和最小的方案。
$ n\le 2\times 10^5 $
$ 1 \le w \le 10^9 $ ($w$ 表示摧毀道路的代價)
這道題實際上是求無向圖最小割,因此可以套網路流的模板。
建圖:這裡我有乙個疑問:縮點之後得到的無向圖中的每條邊 $(u,v)$,在流網路中要加兩條有向邊 $(u\to v) $ 和 $(v\to u)$ 嗎?
還是說可以先進行一次 dfs 或 bfs 將邊從 $s$ 到 $t$ 定向?
這裡介紹乙個樹形 dp 的解法。
為了便於表述,給樹的節點標號。 $x$ 中的節點標號為 1,$y$ 中的節點標號為 $2$,餘下的節點標號為 $0$ 。
我們稱一棵有根樹拆了若干條邊(也可能一條邊都不拆)之後是合法的, 當且僅當拆邊之後的圖中不存在兩個標號分別為 1 和 2 的連通節點。
我們將所有合法的圖分成三類:
據此不難定義 dp狀態,寫出轉移方程。
至此,我們將這個問題轉化成了乙個典型的(子樹合併)樹形 dp 問題。
C 17 6 lambda擴充套件
自從c 17開始,如果lambda表示式符合要求的話,該表示式會隱式轉換為constexpr表示式。表示式內沒有靜態變數,沒有虛函式,沒有 try catch語句,沒有new delete關鍵字 如下 auto squared auto val 隱式轉換為constexpr表示式,即可以在編譯器求值...
Hihocoder 數列問題
給定乙個長度為n數列a a1,a2,an a 1,a 2,a n a1 a2 an 由於某種原因,小ho對這個數列有些不滿意。他希望每個在數列 現的數值,其出現的次數都是唯一的。假設a 1,1,2,2 1和2都出現了2次,小ho就會不滿意。於是小ho決定從a中刪除一些數,使得每個數值出現次數都是唯一...
hihocoder 字尾陣列
時間限制 5000ms 單點時限 1000ms 記憶體限制 256mb 描述小hi平時的一大興趣愛好就是演奏鋼琴。我們知道乙個 旋律被表示為長度為 n 的數構成的數列。小hi在練習過很多曲子以後發現很多作品自身包含一樣的旋律。旋律是一段連續的數列,相似的旋律在原數列可重疊。比如在1 2 3 2 3 ...