poj2396 Budget 上下界可行流

2022-05-01 14:57:06 字數 3677 閱讀 6989

budget:

題意:給定乙個棋盤,給定每一行每一列的和,還有每個點的性質。求乙個合理的棋盤數值放置方式。

思路:比較經典的網路流模型,把每一列看成乙個點,每一行看成乙個點,利用上下界可行流的思路建圖就行了,注意這裡由於是嚴格的小於和大於,所以可以利用 x+1, x-1。

還有就是這道題的0 , 0 說的是對整張圖的操作。

#include #include  

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

/*⊂_ヽ

\\ λ_λ 來了老弟

\('ㅅ')

> ⌒ヽ

/   へ\

/  / \\

レ ノ   ヽ_つ

/ // /|

( (ヽ

| |、\

| 丿 \ ⌒)

| |  ) /

'ノ )  lノ

*/using

namespace

std;

#define lson (l , mid , rt << 1)

#define rson (mid + 1 , r , rt << 1 | 1)

#define debug(x) cerr << #x << " = " << x << "\n";

#define pb push_back

#define pq priority_queuetypedef

long

long

ll;typedef unsigned

long

long

ull;

//typedef __int128 bll;

typedef pairpll;

typedef pair

pii;

typedef pair

p3;//priority_queueq;

//這是乙個大根堆q

//priority_queue,greater>q;

//這是乙個小根堆q

#define fi first

#define se second

//#define endl '\n'

#define boost ios::sync_with_stdio(false);cin.tie(0)

#define rep(a, b, c) for(int a = (b); a <= (c); ++ a)

#define max3(a,b,c) max(max(a,b), c);

#define min3(a,b,c) min(min(a,b), c);

const ll oo = 1ll<<17

;const ll mos = 0x7fffffff; //

2147483647

const ll nmos = 0x80000000; //

-2147483648

const

int inf = 0x3f3f3f3f

;const ll inff = 0x3f3f3f3f3f3f3f3f; //

18const

int mod = 1e9+7

;const

double esp = 1e-8

;const

double pi=acos(-1.0

);const

double phi=0.61803399; //

**分割點

const

double tphi=0.38196601

;template

inline t read(t&x)

inline

void cmax(int &x,int y)

inline

void cmax(ll &x,ll y)

inline

void cmin(int &x,int y)

inline

void cmin(ll &x,ll y)

/*-----------------------showtime----------------------

*/const

int maxn = 1e4+9

;

intn,m;

struct

eedge[maxn];

inthead[maxn],gtot;

void addedge(int u,int v,int val, int

id)

intdis[maxn],cur[maxn],all;

bool bfs(int s,int

t) }

}return dis[t]

}int dfs(int u,int t,int

maxflow)}}

return0;

}int dinic(int s,int

t)

return

flow;

}int low[209][29],high[209][29],du[309

];

char op[5

];int

main()

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

int c; scanf("

%d", &c);

int flag = 1

;

while(c--)}}

}else

if(u == 0

) }

}else

if(v == 0

) }

}else}}

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

}int sum = 0

;

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

if(s1 != s2 || !flag)

int f =dinic(ss, tt);

if(f + s1==sum)

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

else puts("

impossible");

if(t) puts(""

); }

return0;

}/*22 3

8 10

5 6 7

40 2 > 2

2 1 = 3

2 3 > 2

2 3 < 5

2 24 5

6 71

1 1 > 10

*/

view code

POJ2396 Budget 上下界網路流

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

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是...