POJ2396 Budget 上下界網路流

2021-08-08 07:20:42 字數 1534 閱讀 8305

表示弱看了半天才能勉強看懂啊。。

為什麼有上下界會流量不守恆,可以看這篇文章,裡面有證明。

嗯。如果理解了原理的話,這題應該算是乙個入門題了吧。

要注意的地方就是,因為給的條件有大於和小於,所以更新low和up的時候用cap-1,cap+1,而不是cap。。調了好久才發現的。。

#include 

#include

#include

#include

#include

using

namespace

std;

const

int maxn = 1000;

const

int maxm = 2e6;

const

int inf = 0x3f3f3f3f;

struct edge

edge[maxm];

int n,m,tol,head[maxn],dis[maxn],low[maxn][maxn],up[maxn][maxn],cnt[maxn],s,t,ss,tt,ans[maxn][maxn];

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

; head[u]=tol++;

edge[tol]=; head[v]=tol++;

}void init()

bool bfs(int s,int t)}}

return

false;

}int dfs(int u,int t,int cap)

}if (!flow) dis[u]=-1;

return flow;

}int dicnic(int s,int t)

bool paint(int a,int b,char c,int d)

if (low[i][j]>up[i][j]) return

false;

}return

true;

}bool read()

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

int k;

scanf("%d",&k);

bool flag=true;

while (k--)

return flag;

}bool solve()

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

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

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

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

addedge(t,s,inf);

if (dicnic(ss,tt) != sum) return

false;

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

}return

true;

}int main()

if (!solve())

else

}if (t) printf("\n");

}return

0;}

poj2396 Budget 上下界可行流

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

POJ2396 Budget 有源匯上下界可行流

好久沒a的這麼舒暢了。第一次寫居然1a辣。part2 有源匯上下界可行流 有源匯上下界可行流就是在多了源點和匯點,這樣導致除了源點和匯點外的其他店都流量守恆,我們可以從 t 向 s連一條容量為無窮大的邊,保證s,t 也流量守恆,然後就可以轉化為無源匯上下界可行流做啦。這題的建圖很直觀,行列建圖,每行...

POJ 2396 Budget 有上下限的最大流

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