表示弱看了半天才能勉強看懂啊。。
為什麼有上下界會流量不守恆,可以看這篇文章,裡面有證明。
嗯。如果理解了原理的話,這題應該算是乙個入門題了吧。
要注意的地方就是,因為給的條件有大於和小於,所以更新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是...