BZOJ 4500 矩陣 差分約束

2022-05-05 05:48:08 字數 1096 閱讀 8790

從行向列建邊,代表乙個格仔a[i][j],對每個頂點的所有操作可以合併在一起用sum[xi]表示,

那麼題目相當於是要求sum[xi]+sum[xj]==a[xi][xj];

等價於:sum[xj]-(-sum[xi])==a[xi][xj]

等價於:sum[xj]-sum'[xi]<=a[xi][xj] && sum[xj]-sum'[xi]>=a[xi][xj]

等價於:sum[xj]<=sum'[xi]+w && sum'[xi]<=sum[xj]+(-w)

所有就可以用差分約束來做了。跑一遍最短路,判一下負環就可以了。

#include#include

#include

#include

#include

using

namespace

std;

const

int maxn = 2222

;const

int inf = 0x3f3f3f3f

;struct

edge

edge() {}

};int

n, m,k;

vector

egs;

vector

g[maxn];

void addedge(int u, int v, int

w) bool

inq[maxn];

intcnt[maxn];

intd[maxn];

bool

spfa() }}

}}

return

true;}

void

init()

intmain()

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

if(spfa())

else

}return0;

}/*22 2 4

1 1 0

1 2 0

2 1 2

2 2 2

2 2 4

1 1 0

1 2 0

2 1 2

2 2 1

*/

BZOJ 4500 矩陣 差分約束

4500 矩陣 有乙個n m的矩陣,初始每個格仔的權值都為0,可以對矩陣執行兩種操作 選擇一行,該行每個格仔的權值加1或減1。選擇一列,該列每個格仔的權值加1或減1。現在有k個限制,每個限制為乙個三元組 x,y,c 代 子 x,y 權值等於c。問是否存在乙個操作序列,使得操作完後的矩陣滿足所有的限制...

BZOJ4500 矩陣(差分約束)

bzoj 然而許可權題 顯然拆分行和列。不妨設這一行 列總共加減的值是 p 那麼每乙個限制就是兩個數的和為乙個特定的數。這樣子不好做,反正是乙個二分圖,那麼把列的 p 變成 p 這樣就變成了差是乙個定製,直接差分約束判斷一下就好了。include includeusing namespace std...

bzoj4500 矩陣 差分約束系統

有乙個n m的矩陣,初始每個格仔的權值都為0,可以對矩陣執行兩種操作 1.選擇一行,該行每個格仔的權值加1或減1。2.選擇一列,該列每個格仔的權值加1或減1。現在有k個限制,每個限制為乙個三元組 x,y,c 代 子 x,y 權值等於c。問是否存在乙個操作序列,使得操作完後的矩陣滿足所有的限制。如果存...