タイトル:共同根付いた植物
件名の説明:
惑星プランテーションwは、それがMの小さな正方形* n個(m行西方向、南北方向、n列)に分割されています。各フレームの家は、共同根付いた植物が植えられました。
この植物は、根が全体として他の格子を合成する植物と、南北または東西方向に沿って延びることができるという特徴を有しています。
私たちは根現象の間に小さなグリッドがあったことを言った場合はどう、あなたは公園で一緒に植物のどのくらいの歪みを根総権を伝えることができますか?
入力フォーマット:
スペースで区切られた最初の行の行数、二つの整数をm、nは、グリッドは、列の数(1 <M、N <1000表します )。
次の行、整数k、kは次のように表すデータ線(0 <K <100000)は、
次のk行、最初の行二つの整数、B、その数は小さい格子と小さな格子bの数でありますルート一緒に。
グリッド番号は、右の数値に左、上から下へ、行ずつ。
5×4小格子、ID:たとえば
。1 2 3 4
5 6 7 8
9 11 10 12である
13 14 15 16
17 19 20 18です。
サンプル入力:
5 4
16
2 3
1 5
5 9
4 8
7 8
9 10
10 11
11 12
10 14
12 16
14 18
17 18
15 19
19 20
9 13
13 17
出力:5
アイデアは、直接互いに素セットで、非常に簡単です
// 合根植物 の#include <iostreamの> 使用して名前空間はstdを、整数 N、M、W [ 1000005 ]。// 路径压缩int型の検索(INT X){ リターン [X] == X W?X:W [X] = 見つける(W [X])。 } int型のmain(){ int型 K、ANS = 0 。 CIN >> N >> M。 以下のために(INT iが= 1 ; I <= N * M; I ++)W [I] = I。 cinを >> K; 以下のための(int型 I = 0 ; I <K。I ++ ){ int型A、B。 CIN >> B; int型 L1 = 見つけます(); int型 L2 = (B)を見つけます。 [L2]、W = L1。 } ため(INT iは= 1 ; I <= N * M; I ++ ){ 場合(W [i]を== I)ANS ++ 。 } COUT << ANS。 リターン 0 ; }
2020-04-07-00:07:07