bzoj4500 矩陣 帶權並查集

2022-05-20 09:48:06 字數 897 閱讀 7902

題目描述

有乙個n*m的矩陣,初始每個格仔的權值都為0,可以對矩陣執行兩種操作:

1. 選擇一行, 該行每個格仔的權值加1或減1。

2. 選擇一列, 該列每個格仔的權值加1或減1。

現在有k個限制,每個限制為乙個三元組(x,y,c),代**子(x,y)權值等於c。問是否存在乙個操作序列,使得操作完後的矩陣滿足所有的限制。如果存在輸出」yes」,否則輸出」no」。

輸入先輸入乙個t(t <= 5)代表輸入有t組資料,每組資料格式為:

第一行三個整數n, m, k (1 <= n, m,k <= 1000)。

接下來k行,每行三個整數x, y, c。

輸出對於每組資料,輸出yes或者no。

樣例輸入

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

樣例輸出

yesno

題解帶權並查集

如果把行操作看作加,列操作看作減,那麼每個限制就是「某行操作比某列操作大多少」。

使用帶權並查集維護即可。

注意多組資料要把資料讀全。

#include #include #include #define n 1010

using namespace std;

int x[n] , y[n] , z[n] , f[n << 1] , r[n << 1];

int find(int x)

int main()

if(i > k) puts("yes");

else puts("no");

} return 0;

}

BZOJ 4500 矩陣 帶權並查集

這個思路挺巧妙的 定義一行 列的權值為操作後所整體增加的值.那麼,我們會有若干個 a x b y c 的限制條件.但是呢,我們發現符號是不能限制我們的 因為可加可減 所以可以將限制條件轉化為 a x b y c 這個用帶權並查集就可以方便地維護了 code include define n 2006...

並查集,帶權並查集

題意 ignatius過生日,客人來到,他想知道他需要準備多少張桌子。然而一張桌子上面只能坐上相互熟悉的人,其中熟悉可定義成為a與b認識,b與c認識,我們就說a,b,c相互熟悉 例如a與b熟悉and b與c熟悉,d與e熟悉,此時至少需要兩張桌子。輸入 t表示樣例個數,n表示朋友個數,朋友從1到n編號...

BZOJ 4500 矩陣 差分約束

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