Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const
- MAXN = 100000;
- MAXM = 100000;
- var
- top, used: array [1..MAXN] of Integer;
- e, next: array [1..MAXN + 2 * MAXM + 1] of Integer;
- i, cur, v, n, m, a, b, nf, ans: Integer;
- procedure addEdge(a, b: Integer);
- begin
- e[top[a]] := b;
- next[top[a]] := nf;
- top[a] := nf;
- Inc(nf);
- end;
- procedure dfs(v: Integer);
- var
- cur: Integer;
- begin
- used[v] := 1;
- cur := v;
- while e[cur] <> -1 do begin
- if used[e[cur]] = 0 then
- dfs(e[cur]);
- cur := next[cur];
- end;
- end;
- begin
- ReadLn(n, m);
- nf := n + 1;
- for i := 1 to MAXN + 2 * MAXM + 1 do
- e[i] := -1;
- for i := 1 to n do begin
- top[i] := i;
- used[i] := 0;
- end;
- for i := 1 to m do begin
- ReadLn(a, b);
- addEdge(a, b);
- addEdge(b, a);
- end;
- ans := 0;
- for i := 1 to n do
- if used[i] = 0 then begin
- dfs(i);
- Inc(ans);
- end;
- WriteLn(ans);
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement