01/02 競プロ典型012
ビンゴのような長方形の表において、指定された二点が繋がっているか判定
初期のグラフはどのマスも有効ではなく、入力に応じて以下の2種類の操作をする
(1)t==1のとき、指定されたマス(x,y)を有効にする
(2)t==2のとき、指定された二点が、有効なマスのみを辿って結ぶことが可能か判定
Union-find木という考え方がいいらしい
根(木の最下層)が同じなら到達可能だよねという考え方
3と4が繋がっているかは、根までそれぞれ辿っていき3→2→1(根)、4→1(根)のように根が同じなら到達可能
UnionFindは四つの操作
init、初期化
配列parをサイズH*W、初期値-1に初期化
この配列は、各マスの根を保存する
root、根の更新と探索
根を更新しながら根を返す
ちょっとよくわからない
unite、根を統合
与えられた二点の根を同じにする
この問題では、(1)で与えられた一点とそれに隣接する四点を統合する
same、根が同じか判定
その通り
(1)の処理をquery1で、(2)の処理をquery2の関数で行っている
むずいけど段々理解
クラスの書き方
class UnionFind{
public:
func()
};
クラスの変数
UnionFind UF;