題意:
給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,假設有解求屌絲最多能拍多少張照,並求每天給相應女神拍多少張照 否則輸出 ...