budget:
題意:給定乙個棋盤,給定每一行每一列的和,還有每個點的性質。求乙個合理的棋盤數值放置方式。
思路:比較經典的網路流模型,把每一列看成乙個點,每一行看成乙個點,利用上下界可行流的思路建圖就行了,注意這裡由於是嚴格的小於和大於,所以可以利用 x+1, x-1。
還有就是這道題的0 , 0 說的是對整張圖的操作。
#include #includeview code#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
*/
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是...