題意和思路都和我部落格的這篇文章幾乎一樣:
這裡有一組測試資料:
#include #include #include using namespace std;
const int inf = 0x6fffffff ; //權值上限
const int maxpt = 450 ; //頂點數上限
const int maxeg = 450*450 ; //邊數上限
const int maxque = 100005 ; // 佇列長度
/* s = 1 ; // 源點
t = n ; // 匯點
*/class mnf_sap
}for (i=1;i<=n;i++)
cnt[dis[i]]++;
}public:
struct node
node (int _v,int _cap,int _next)
}edges[maxeg];
int n; //總節點數
int e;
int head[maxpt];
// mnf_sap(){}
// ~mnf_sap(){}
void init (int temp) //演算法初始化
void add (int u,int v,int cap) //始,終,量
int sap ()
{int u,v,i,maxflow=0; //總最大流
s=1;
t=n;
u=s;
flow[s]=inf;
for (i=1;i<=n;i++)
curedge[i]=head[i]; //當前弧初始化
bfs ();
cnt[0]=n;
while (dis[s]
poj 3281Dining(網路流 拆點)
題目大意 john養了n只奶牛,他為奶牛準備了f個食物和d個飲料,但是每只奶牛只對其中的一些飲料和食物感興趣,現在請制定一些方案,使得盡可能多的奶牛吃到自己感興趣的食物和飲料,求出最多滿足奶牛的個數。思路 拆點建圖跑dinic演算法最大流,每只奶牛拆成兩個點,例如第ni個奶牛拆為ni 和 ni ni...
POJ 3281 Dining 最大流 拆點
解題思路 令st 0為源點,en f 2 n 1為匯點,st向每種食物建流量為1的邊,每種食物向喜歡它的牛 拆點1 建流量為1的邊,眉頭牛的拆點之間建流量為1的邊,每頭牛 拆點2 向它喜歡的飲料建流量為1的邊,每種飲料向en建流量為一的邊。注意,一定要將牛拆點,如果一頭牛只用乙個點然後連線飲料和食物...
poj 3281 Dining(最大流基礎,拆點)
題意 思路 因為food和drink要麼同時要,要不都不要,則需要把它們串起來,牛放中間 對牛進行拆點以限制每頭牛吃了乙份food,和乙份drink const int inf int max 2 const int maxn 100000 const int maxv 500 struct edg...