題目描述
有乙個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 1010using 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。問是否存在乙個操作序列,使得操作完後的矩陣滿足所有的限制...