Poj 3281 Dining 拆點網路流

2021-06-12 20:43:56 字數 935 閱讀 1590

題意和思路都和我部落格的這篇文章幾乎一樣:

這裡有一組測試資料:

#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...