POJ2396 Budget 有源匯上下界可行流

2021-07-10 07:23:05 字數 2077 閱讀 5235

好久沒a的這麼舒暢了。。第一次寫居然1a辣。。

part2:

有源匯上下界可行流

有源匯上下界可行流就是在多了源點和匯點,這樣導致除了源點和匯點外的其他店都流量守恆,我們可以從

t 向

s連一條容量為無窮大的邊,保證s,

t 也流量守恆,然後就可以轉化為無源匯上下界可行流做啦。

這題的建圖很直觀,行列建圖,每行連源點,每列連匯點,上下界均為su

mi,然後關於點(i

,j) 的操作就把第

i 行和第

j列連邊,根據操作確定上下界。然後直接跑有源匯上下界可行流就好辣。

#include

#include

#include

#define inf 1000000007

#define n 305

#define m 10005

using

namespace

std;

int head[n],cur[n],dis[n],q[n];

int next[m],list[m],key[m];

int n,m,q,s,t,ss,tt,cnt,tot,total;

int a[n],b[n],l[n][n],h[n][n],d[n];

bool flag;

inline

int read()

while (c>='0'&&c<='9')

return a*f;

}inline

void insert(int x,int y,int z)

inline

bool bfs()

return dis[tt]!=-1;

}int find(int x,int flow)

if (!used) dis[x]=-1;

return used;

}inline

int dinic()

return ans;

}inline

void update(int x,int y,int type,int num)

}int main()

int num=read();

if (!x&&!y)

for (int i=1;i<=n;i++)

for (int j=1;j<=m;j++)

update(i,j,type,num);

else

if (!x)

for (int i=1;i<=n;i++)

update(i,y,type,num);

else

if (!y)

for (int i=1;i<=m;i++)

update(x,i,type,num);

else update(x,y,type,num);

}for (int i=1;i<=n;i++)

for (int j=1;j<=m;j++)

d[i]-=l[i][j],d[j+n]+=l[i][j];

for (int i=1;i<=n;i++)

d[i]+=a[i],d[s]-=a[i];

for (int i=1;i<=m;i++)

d[t]+=b[i],d[i+n]-=b[i];

for (int i=1;i<=n;i++)

for (int j=1;j<=m;j++)

insert(i,j+n,h[i][j]-l[i][j]),insert(j+n,i,0);

insert(t,s,inf); insert(s,t,0);

for (int i=s;i<=t;i++)

if (d[i]>0) total+=d[i],insert(ss,i,d[i]),insert(i,ss,0);

else

if (d[i]<0) insert(i,tt,-d[i]),insert(tt,i,0);

if (dinic()!=total)

else

puts("");

}puts("");

}return

0;}

POJ2396 Budget 上下界網路流

表示弱看了半天才能勉強看懂啊。為什麼有上下界會流量不守恆,可以看這篇文章,裡面有證明。嗯。如果理解了原理的話,這題應該算是乙個入門題了吧。要注意的地方就是,因為給的條件有大於和小於,所以更新low和up的時候用cap 1,cap 1,而不是cap。調了好久才發現的。include include i...

poj2396 Budget 上下界可行流

budget 題意 給定乙個棋盤,給定每一行每一列的和,還有每個點的性質。求乙個合理的棋盤數值放置方式。思路 比較經典的網路流模型,把每一列看成乙個點,每一行看成乙個點,利用上下界可行流的思路建圖就行了,注意這裡由於是嚴格的小於和大於,所以可以利用 x 1,x 1。還有就是這道題的0 0 說的是對整...

POJ 2396 Budget 有上下限的最大流

題意 輸入的第一行是測試資料的個數。每組測試資料的第一行是n和m。第二行是n個數,表示n行的和,第三行是m個數,表示m列的和。接下來乙個k,表示有以下k個限制,每個限制的形式x y z w,其中z是 或者 表示第x行第y列的元素和w的大小關係。假如z是 那麼說明第x行第y列的元素必須大於w。如果x是...