byteland 國**收到了一條匿名舉報,其中說當地黑幫老大正計畫一次從港口到郊區倉庫的運輸。**知道運輸的時間並且知道運輸需要用到國家的高速公路網。
高速公路網包含雙向的高速公路段,每個路段直接連著兩個不同的收費站。乙個收費站可能與很多其他的收費站相連。汽車只能通過收費站進入或離開高速公路網。據所知,黑幫會距港口邊最近的收費站進入高速公路,從距倉庫最近的收費站離開(不會在出高速後重新進入)。特警組位於選定的收費站處。當運輸車輛進入被監控的收費站時,它就會被警察抓住。
從這個角度看,最簡單的辦法就是在每個收費站處都安排特警班。然而,控制乙個收費站需要特定的費用,每個收費站費用不同。**想要讓花費最小,所以他們需要制定乙個收費站的最小控制集,這個集合滿足兩個條件:
所有從港口到倉庫的交通必須至少經過集合中的乙個收費站
監控這些收費站的費用(即監控每乙個收費站費用之和)最小
你可以假設使用高速公路可以從港口到倉庫。
任務寫乙個程式能夠:
從標準輸入中讀取高速公路網,監控代價和運輸的起點和終點
找到收費站的最小控制集
輸出這個集合到標準輸出
標準輸入的第一行包含兩個整數 n 和 m,表示收費站的總數和公路段的總數。收費站按 1 到 n 標號;
第二行包含兩個整數 a 和 b,分別表示距港口和倉庫最近的兩個收費站編號;
接下來 n 行表示控制費用,第 i 行包含乙個整數,表示第 i 個收費站的控制費用 c;
接下來 m 行表示高速公路網,第 j 行包含兩個整數 x 和 y,表示在 x 和 y 收費站之間有一條公路段相連。每一條高速公路段只出現一次。
唯一的一行輸出應包含最小控制集中收費站的編號,以遞增順序輸出,用乙個空格分隔。
如果有多於乙個最小控制集,你的程式可以輸出任意乙個。
5 65 324
83101 5
1 22 4
4 52 3
3 41 4
拆點之後。把費用當流量,就是最小割。
我們在殘餘網路dfs。不經過滿流的邊,那麼如果乙個點拆的2個點乙個在s集合。乙個在t集合。那麼這個點就是選擇的。因為源匯可以拆
我們應該建立虛的源匯。
#includeusing namespace std;
const int maxn = 2e5 + 10;
const int maxm= 1e6+ 10;
const int inf = 0x3f3f3f3f;
//注釋為弧優化
struct max_folw edge[maxm << 1];
int head[maxn];
bool vis[maxn];
int cnt;
void init(int s, int t)
void add(int start, int to, int cap) ;
head[start] = cnt++;
}void addedge(int start, int to, int cap)
bool bfs()
}thead++;
}return false;//匯點是否成功標號,也就是說是否找到增廣路
}int dfs(int x, int cap)
}d[x] = -2;//防止重搜
return flow;
}int maxflow()
return flow;
}//得到割點集合
queueq;
void bfs()}}
}}flow;
//edge[i].cap-edge[i].flow==0 容量-流量=可流的流量 =0說明已經滿流
int a[maxn];
setst;
int main()
for(int i=1; i<=m; i++)
flow.maxflow();
flow.bfs();
for(int i=1; i<=n; i++)
}for(auto x: st)
printf("\n");
return 0;
}
網路流最小割(拆點)
具體思路 網路流的最小割等於玩網路流的最大流量,注意拆點,以及拆點後邊連的時候是拆點後第二個點連向目的地。ac include include include includeusing namespace std const int maxn 100010 點數的最大值 const int maxm...
poj Friendship 最小割 拆點
題意 在乙個關係網中,如果說a與b保持聯絡,那麼a應該知道b的 號碼。或者存在c,a知道c的 號碼,c知道b的 號碼。可以認為如果a知道b的 號碼,那麼b也知道a的 號碼。在乙個關係網中可能會出現一些意外事故,比如某人更換手機號碼了,導致他與其他人都失去了聯絡。問給定兩個人s和t,問,最少多少人出現...
Food 割點 網路流
food food hdu 4292 題面 每個人有多個喜歡的食物和飲料,每個人只能挑一種食物和飲料,問最大能滿足多少人 解法 割點 吧人分成兩部分,中間用邊權為1的線連線,這樣保證每個人只能挑一種食物和飲料 建圖 原點 食物 人1 人2 飲料 匯點 開始跑最大流 include include i...