從行向列建邊,代表乙個格仔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。問是否存在乙個操作序列,使得操作完後的矩陣滿足所有的限制。如果存...