素集合データ構造、Union Find に関するカテゴリーです。

AtCoder,Union Find,実装

問題方針

生徒がどの集団に属するかは Union-Find で管理し、ある集団における各クラスの人数はマップを用いて管理します。ある集団をマージするとき、各クラスの情報も更新する必要があるので、人数の少ない集団の各クラスの人数を人数の多 ...

AtCoder,Union Find,数え上げ

問題方針

例えば、\( 1 \) 行目と \( 2 \) 行目が交換可能であり、\( 1 \) 行目と \( 3 \) 行目が交換可能であるとき、各 \( 1, 2, 3 \) 行の順番を任意に並び替えることができます。したがって列に対 ...

AtCoder,Union Find

問題方針

連結されている頂点の集合は、任意の頂点 \( 2 \) 組に対して操作を行うことができます。これは、隣接している頂点を適切に選ぶことで達成できます。したがって、ある連結されている頂点の集合の \( a_i \) と \( b_ ...

AtCoder,Union Find,数え上げ

問題方針照らされるマスについて

散らかっていないマス \( (i, j) \)に照明を置いたとき、水平方向を照らすマスの数を \( a(i, j) \) とし、垂直方向を照らすマスの数を \( b(i, j) \) とします。このとき、 ...

AtCoder,Union Find,幅優先探索

問題方針Union-Find

グラフが連結かどうかを調べるには Union-Find を使えば良いので、ライブラリの dsu を使います。グループの数から \( 1 \) を引いた値が必要な道路の本数です。グループの数は、groups( ...

AtCoder,Union Find,幅優先探索

問題方針

友達同士のグループの人数の最大値の分だけグループがあれば、「同じグループの中に友達がいない」という状況がつくれます。したがって、連結成分の最大値を求めます。これは、幅優先探索や Union-Find を使うことで求めることがで ...

AtCoder,Union Find

問題方針

まず初めに、友達関係の Union-Find を作成します。このとき、人 \( i \) の友達の数を \( f_i \) として数えます。次に、人 \( i \) のブロック人数を \( b_i \) と、人 \( i \) ...

AtCoder,Union Find,グラフ理論

問題方針行と列を分けて考える

グリッドの問題は行と列を分けて考えることができるかを最初に考えます。この問題も行と列を分けて考えることができます。\( i \) 行 \( j \) 列のマスを \( c(i, j) \) とします。ここで ...

AtCoder,Union Find,グラフ理論

問題方針与えられた情報から番号を当てられるか?

\( A_{X_i} + A_{Y_i} + Z_{i}\) が偶数という情報から番号を当てられることができるかを考えます。

例えば、\( A_1 + A_2 + 3 \mod ...

AtCoder,Union Find,グラフ理論,探索,深さ優先探索

問題方針各マスに番号を割り振る

\( H \) 行 \( W \) 列のマスを持つグリッドにおける \( i \) 行 \( j \) 列目のマスの番号を \( i \times W + j \) とします。このようにマスの番号を割り当 ...