題意:
思路:用 s -> 食物 -> 牛 -> 牛 -> 飲料 -> t 為路徑,建圖。然後跑最大流。
p.ps.: 抄的書上的思路和dfs增廣路的模板,當做學習網路流的第一步吧 :)
**:
1 #include 2 #include 3 #include 4 #include 5pku3281using
namespace
std;67
const
int maxv = 500;8
const
int inf = 0x7fffffff;9
10struct
edge ;
1516 vectorg[maxv]; //
圖的鄰接表表示
17bool used[maxv]; //
dfs中用到的訪問標記
1819
//向圖中增加一條從s到t容量為cap的邊
20void addedge(int
from, int to, int
cap) );
22 g[to].push_back((edge));23}
2425
//dfs找增廣路
26int dfs(int v, int t, int
f) 39}40
}41return0;
42}4344
//求解從s到t的最大流
45int maxflow(int s, int
t) 53
return
flow;54}
5556
const
int maxn = 105;57
58int
n, f, d;
59bool
likef[maxn][maxn];
60bool
liked[maxn][maxn];
6162
void
input()
73for (int j = 0; j < d; j++) 77}
78}7980
void
solve()
9192
//在飲料和t之間連邊
93for (int i = 0; i < d; i++)
9697
for (int i = 0; i < n; i++)
105//
牛到飲料
106for (int j = 0; j < d; j++) if
(liked[i][j])
109}
110 printf("
%d\n
", maxflow(s, t));
111}
112113
intmain()
Poj 3281 Dining 拆點網路流
題意和思路都和我部落格的這篇文章幾乎一樣 這裡有一組測試資料 include include include using namespace std const int inf 0x6fffffff 權值上限 const int maxpt 450 頂點數上限 const int maxeg 450...
poj 3281Dining(網路流 拆點)
題目大意 john養了n只奶牛,他為奶牛準備了f個食物和d個飲料,但是每只奶牛只對其中的一些飲料和食物感興趣,現在請制定一些方案,使得盡可能多的奶牛吃到自己感興趣的食物和飲料,求出最多滿足奶牛的個數。思路 拆點建圖跑dinic演算法最大流,每只奶牛拆成兩個點,例如第ni個奶牛拆為ni 和 ni ni...
poj3281 dining 經典最大流建模方法
題意 有f中食物和d種飲料,每頭牛只能享用一種食物和飲料,每個食物跟飲料也只能被一頭牛享用。現在有n頭牛,每頭牛都有自己喜歡的食物種類列表和飲料列表,問最多能使幾頭牛同時享用到自己喜歡的食物和飲料。f,d,n都是一百以內的。思路 就不說一開始的想法了,是最近學習的最大流的建模裡面的新的方法。之前做過...