61 lines
888 B
ObjectPascal
61 lines
888 B
ObjectPascal
program main;
|
|
|
|
var
|
|
parent: array[0..1004] of integer;
|
|
n, m, i, p, q, clusters: integer;
|
|
|
|
function getint: integer;
|
|
begin
|
|
read(getint);
|
|
end;
|
|
|
|
function find(root: integer): integer;
|
|
begin
|
|
if parent[root] = root then
|
|
find := root
|
|
else
|
|
begin
|
|
parent[root] := find(parent[root]);
|
|
find := parent[root];
|
|
end;
|
|
end;
|
|
|
|
procedure merge(p, q: integer);
|
|
var
|
|
root_p, root_q: integer;
|
|
begin
|
|
root_p := find(p);
|
|
root_q := find(q);
|
|
if root_p <> root_q then
|
|
begin
|
|
parent[root_q] := root_p;
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
n := getint();
|
|
m := getint();
|
|
|
|
for i := 0 to n - 1 do
|
|
begin
|
|
parent[i] := i;
|
|
end;
|
|
|
|
for i := 0 to m - 1 do
|
|
begin
|
|
p := getint();
|
|
q := getint();
|
|
merge(p, q);
|
|
end;
|
|
|
|
clusters := 0;
|
|
for i := 0 to n - 1 do
|
|
begin
|
|
if parent[i] = i then
|
|
clusters := clusters + 1;
|
|
end;
|
|
|
|
write(clusters);
|
|
read(clusters);
|
|
end.
|