LA 4597 網路流 有上下界

2021-06-23 00:17:46 字數 1583 閱讀 1941

#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組成乙個迴圈體,裡面流躺物...