網路流 & 二分圖 & 線性規劃
網路流
1. P4177 [CEOI2008]order
題意 :有 \(n\) 個工作, \(m\) 個機器, 每種機器可以租或者買, 給定 \(n\) 個工作的收益, 需要的機器和此次租這臺機器的費用, 求最大化利益。
\(\text{solution}:\)
顯然, 如果沒有租的要求的話, 那麼就是一個最大權閉合子圖模板。
最大權閉合子圖 :一個有向圖,點有點權,選一個點必須要選它的所有後繼, 求最大權值和。
具體建圖 :新建一個源點 S 和匯點 T,將 S 與所有點權為正的點連邊,流量為 \(a_i\), 並累加權值, 將 所有點權為負的點向 T 連邊, 流量 \(-a_i\)。對於原圖,建 \(x \to y\)
對於點權為正且無殘餘流量的點來說, 它沒有被選,否則被選。
對於點權為負且無殘餘流量的點來說, 它被選, 否則沒被選。 可以根據此輸出方案。
好了, 這個題還有租的機器的方案,因為買對所有工作都有效, 租只對當前工作有效, 那麼就把流量為 \(\infty\) 的改成租的代價再跑一遍最大流即可。
用最小割理解可能更簡單一些。
P3749 [六省聯考 2017] 壽司餐廳
題意 : \(n\) 種壽司, 每種壽司有一個代號 \(a_i\) 和一個美味度 \(d_{i,i}\),你可以不限次數吃一段區間的壽司, 收益為 \(\sum\limits_{i=l}^{r}\sum\limits_{j=i}^{r}d_{i,j}\)
假設最後你吃了 \(c\) 種代號為 \(x\) 的壽司, 你要支付的代價為 \(mx^2+cx\), \(m\) 是給定的一個常數。
最大化收益 - 代價。
\(\text{solution}:\)
發現每種收益只能算一次這個現在比較奇怪, 而且要求的是收益 - 代價, 不難想到最大權閉合子圖。
考慮怎麼把這個圖建出來 :你要得到 \(d_{i,j}\) 的收益, 那麼一定得到了 \(d_{i,j - 1}\) 和 \(d_{i+1,j}\) 的收益,因為你選擇的是一段段的區間,那麼就從 [i, j] 連向 [i,j - 1] 和 [i + 1, j],再對 \(d_{i,j}\)
把代價放在單點上考慮, 每吃一個代號為 \(a_x\) 的, 那麼就要付出 \(a_x\) 的代價, 因為代號的 \(mx^2\) 也只能算一次, 再把單點連向它的代號, 代號的代價即是 \(mx^2\),跑出最大流即可。
P1361 小M的作物
題意 : \(n\) 種作物, A,B 兩塊地,每種作物只能種在一塊地裡面, 會有不同的收益。
另外有 \(m\) 種組合方式, 表示把該種組合的所有作物都種在一塊地裡面會有額外收益。
求最大收益。
\(\text{solution}:\)
二選一模型, 可以考慮最小割。
先考慮沒有額外收益的情況 :源點表示選 A,匯點表示選 B,每個點與 S, T 分別連邊, 流量為分別的權值, 最後用總和 - 最大流即可。
再考慮加入點集的答案, 這個點集無非只有三種情況 :
1.全種在 A 中,有 \(c_{1, i}\) 的貢獻。 2. 全種在 B 中, 有 \(c_{2, i}\) 的貢獻。 3. 只有部分在 A,無貢獻。
我們考慮建出一個虛點來表示這個集合,分別與 S, T 相連邊, 再與集合中所有的點連邊, 邊權為 \(\infty\) , 表示這些邊不能被刪。
那麼跑完最小割後, 如果邊權為 \(c_1\) 的邊沒有割去,那麼這些點一定都屬於集合 A。 如果邊權為 \(c_2\) 的邊沒有割去, 那麼這些點一定都屬於集合 B,那些邊權為 \(\infty\) 的邊一定不會被刪。
感性理解即可,對於這種模型一定要多積累和多練。