#include#include#include#include#define pb push_back
#define mp make_pair
#define f1 first
#define f2 second
using namespace std;
const int maxn=110, inf=0x3f3f3f3f;
struct isap
edge(int a,int b,int c,int d,int e,int f):from(a),to(b),cap(c),flow(d),low(e),real(f){}
};int n,m,s,t,ss,tt,lowtot;//結點數,邊數(含反向弧),源點,匯點
vectoredges;//邊表,edges[e]&edges[e^1]互為反向弧
vectorg[maxn];//鄰接表,g[i][j]表示結點i的第j條邊在e陣列中的序號
bool vis[maxn];//bfs使用
int d[maxn];//從起點到i的距離
int cur[maxn];//當前弧下標
int p[maxn];//可增廣路上的上一條弧
int num[maxn];//距離標號計數
void addedge(int from,int to,int cap,int low)//重邊不影響
void add(int from,int to,int low,int ma)
addedge(ss,to,low,0);
addedge(from,to,ma-low,low);
addedge(from,tt,low,0);
}void init(int n)}}
}int augment()
x=t;
while(x!=s)
return a;
}int maxflow(int s,int t)//結點數
}if(!ok)//retreat
if(--num[d[x]]==0) break;//gap優化
num[d[x]=m+1]++;
cur[x]=0;
if(x!=s) x=edges[p[x]].from;}}
return flow;
}vectoranss;
void dfs(int x)
it.addedge(t,s,mid,0);
for (int i=0;i=it.lowtot; else return ans;
}void doit()
}pp=aa.size();
int l=1,r=pp,mid,day; //r一開始為n,被自己2跪了
while (r>=l)
else l=mid+1;
}printf("%d\n",day);
int ans=ok(day,1);
// printf("flow=%d\n",ans);
it.solve(day);
}int main()/*6
1 31 3
1 42 5 6 00
*/
有上下界網路流
前言 下面寫得只是一些十分基礎的東西,是給我以後自己看的,想要徹底弄明白這個內容,推薦去看liu runda。注 為了方便,下面所有的 x,y,l,r 都表示一條從x連向y,流量下界為l,流量上界為r的邊。問題簡述 給出乙個有向圖,每條邊有流量上下界,沒有源點和匯點,要求找到一種流的方法,使得每個點...
有上下界的網路流
有上下界的網路流 這幾天看了周源的 一種簡易的方法求解流量有上下界的網路中網路流問題 並完成了 sgu 194 zoj 2314 reactor cooling,sgu 176 flow construction 和hoj 2135 poj 2396 budget三道題。作為周源文章中提到的求解上下...
有上下界網路流問題
此類問題可以分為三小類問題 一 無源匯有上下界最大流 二 有源匯有上下界最大流 三 有源匯有上下界最小流 1 無源匯有上下界最大流 題目大意 給n個點,及m根pipe,每根pipe用來流躺液體的,單向的,每時每刻每根pipe流進來的物質要等於流出去的物質,要使得m條pipe組成乙個迴圈體,裡面流躺物...