戳這裡
題目相當於給定一張dag,求最少路徑覆蓋,這不就是網路流24題裡的那個最小路徑覆蓋的弱化版嗎?
根據題意和最小路徑覆蓋的那個題的方法,我們把每乙個小鎮拆成入點和出點兩個,然後每乙個入點向能到達的小鎮的出點連邊,流量為 \(1\) ,同時原點向每乙個小鎮的入點連邊,每乙個小鎮的出點向匯點連一條邊,流量都為 \(1\),答案就是 \(ans=總點數-最大流\)
正確性證明:
由於每乙個點和源匯之間的流量都是1,所以每一次增廣相當於把兩個點合併,而兩個點合併體現在原圖上的意義就是減少了一條路徑,這樣最大流表示出來的就是圖上最大邊數
#includeusing namespace std;
namespace zzc
{ const int maxn = 5005;
const int maxm = 3e5+5;
const int inf = 0x3f3f3f3f;
洛谷P2172 國家集訓隊 部落戰爭 題解
不要被 國家集訓隊 的標籤嚇到,其實這題不是很難。本題可以對比p4304 tjoi2013 攻擊裝置 互不攻擊的網路流問題來想。這道題唯一新增的條件就是只能從上往下征戰,於是我們就從8個方向縮減到了四個放向,哪四個呢?aa 1 r bb 1 c aa 2 r bb 2 c aa 3 c bb 3 r...
國家集訓隊 部落戰爭
差不多就是dag最小路徑覆蓋吧 拆點連邊。不會的可以看看蒟蒻的這個關於網路流的小總結qwq 最小路徑覆蓋 不相交 節點個數 最大匹配 但是要注意的是這個題的節點個數不能算高山深澗的點,因為它本來就非法,自己就構不成乙個路徑。如下 include include include include inc...
國家集訓隊 部落戰爭
嘟嘟嘟 這其實就是一道最小邊覆蓋的板兒題。暴力連邊,然後跑匈牙利 dinic 則答案就是總結點數 匹配數。比如節點1和2,2和3匹配上了,那麼就是1到2,2到3這兩條路徑連線到一塊,相當於把節點3合併到這條路徑上了。所以從路徑數就是總結點數 連線次數。然而我不知怎麼想的寫了個費用流,雖然正確性是對的...