有上下界最大流初步zoj2314

2021-07-25 06:22:04 字數 1172 閱讀 2114

題意:

給n個點,及m根pipe,每根pipe用來流躺液體的,單向的,每時每刻每根pipe流進來的物質要等於流出去的物質,要使得m條pipe組成乙個迴圈體,裡面流躺物質。

並且滿足每根pipe一定的流量限制,範圍為[li,ri].即要滿足每時刻流進來的不能超過ri(最大流問題),同時最小不能低於li。

題解:上界用ci表示,下界用bi表示。

下界是必須流滿的,那麼對於每一條邊,去掉下界後,其自由流為ci– bi。

主要思想:每乙個點流進來的流=流出去的流

對於每乙個點i,令

mi= sum(i點所有流進來的下界流)– sum(i點所有流出去的下界流)

如果mi大於0,代表此點必須還要流出去mi的自由流,那麼我們從源點連一條mi的邊到該點。

如果mi小於0,代表此點必須還要流進來mi的自由流,那麼我們從該點連一條mi的邊到匯點。

如果求s->t的最大流,看是否滿流(s的相鄰邊都流滿)。

滿流則有解,否則無解。

上下界問題中的實際流量就是:建圖後流量+原先下界流量

模板

#include#include#include#include#include#includeusing namespace std;

const int inf=0x3f3f3f3f;

inline int read()

int n,m,tot,cur[205],head[205],t,s,in[205];

int low[100005];

struct aa

edge[100005];

void addedge(int u,int v,int d)

void build()

int lev[205];

bool bfs()

} return false;

}int dfs(int u,int maxflow)

return ans;

}void dinic()

}bool jud()

int main()

build();

dinic();

if (!jud()) printf("no\n");

else

printf("\n");

} return 0;

}



上下界 最大流

做法 1 有源彙編成無源匯 t s,0,infmax 2 ss tt 連線個點 intout 0 ss i,0,inout i inout 0 i,tt,0,inout i 3 然後跑一片最大流 max dinic ss,tt 之後的這步很重要 head ss head tt 1 刪除ss 和 tt...

zoj 3229 有源匯上下界最大流

處理有源匯有上下界最大流問題是 1.構造附加網路 2.對ss tt求最大流 ss tt滿流則有解 3.若有解,對s t求最大流 而有源匯有上下界最小流問題則是 1.構造附加網路 不新增 t,s 邊 2.對ss tt求最大流 3.新增 t,s 邊 4.對ss tt求最大流 5.若ss tt滿流,則 t...

zoj 3229 有源匯有上下界的最大流模板題

坑啊,pe的程式在zoj上原來是wa。題目大意 乙個屌絲給m個女神拍照。計畫拍照n天,每一天屌絲最多個c個女神拍照,每天拍照數不能超過d張,並且給每乙個女神i拍照有數量限制 li,ri 對於每乙個女神n天的拍照總和不能超過gi,假設有解求屌絲最多能拍多少張照,並求每天給相應女神拍多少張照 否則輸出 ...