題目大意:john養了n只奶牛,他為奶牛準備了f個食物和d個飲料,但是每只奶牛只對其中的一些飲料和食物感興趣,現在請制定一些方案,使得盡可能多的奶牛吃到自己感興趣的食物和飲料,求出最多滿足奶牛的個數。
思路:拆點建圖跑dinic演算法最大流,每只奶牛拆成兩個點,例如第ni個奶牛拆為ni 和 ni 』 , ni和ni'之間建立一條雙向邊,正向流量是1,反向為0,最後奶牛拆成兩部分,兩部分之間對應的奶牛相互有邊,f個食物對應的再與第一部分的奶牛相連邊,容量為1,第二部分的奶牛再與d個飲料相連邊,容量仍然為1,再建立乙個源點和f個食物相連成f條容量為1的邊,d個飲料再與新建立的匯點相連建立d條容量為1的邊,最終從源點到匯點跑一邊dinic得到的最大流就是最多滿足的奶牛個數了。
addedge(i+f+n,n+td);//拆點建圖 奶牛2->飲料
} }cout<
return 0;
}
Poj 3281 Dining 拆點網路流
題意和思路都和我部落格的這篇文章幾乎一樣 這裡有一組測試資料 include include include using namespace std const int inf 0x6fffffff 權值上限 const int maxpt 450 頂點數上限 const int maxeg 450...
poj3281 dining 經典最大流建模方法
題意 有f中食物和d種飲料,每頭牛只能享用一種食物和飲料,每個食物跟飲料也只能被一頭牛享用。現在有n頭牛,每頭牛都有自己喜歡的食物種類列表和飲料列表,問最多能使幾頭牛同時享用到自己喜歡的食物和飲料。f,d,n都是一百以內的。思路 就不說一開始的想法了,是最近學習的最大流的建模裡面的新的方法。之前做過...
POJ 3281 Dining 最大流 拆點
解題思路 令st 0為源點,en f 2 n 1為匯點,st向每種食物建流量為1的邊,每種食物向喜歡它的牛 拆點1 建流量為1的邊,眉頭牛的拆點之間建流量為1的邊,每頭牛 拆點2 向它喜歡的飲料建流量為1的邊,每種飲料向en建流量為一的邊。注意,一定要將牛拆點,如果一頭牛只用乙個點然後連線飲料和食物...