Cod sursa(job #551395)

Utilizator andreifirstCioara Andrei Ioan andreifirst Data 10 martie 2011 18:46:25
Problema Parcurgere DFS - componente conexe Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 1.19 kb
type muchie = ^nod;
     nod = record n:longint; a:muchie; end;

var v:array [1..100000] of muchie;
    t:array[1..100000] of longint;
    chk:array [1..100000] of boolean;
    p, r:muchie;
    i, j, n, m, sum, x, y, l, k, kk:longint;
    f, g:text;

begin
assign (f, 'dfs.in'); reset (f);
assign (g, 'dfs.out'); rewrite (g);
read (f, n, m);
for i := 1 to n do
  begin
  new (v[i]); v[i]^.n:=0;
  end;
for i := 1 to m do
  begin
  readln (f, x, y);    {test readln}

  p:=v[x];
  l:=p^.n;
  p^.n:=p^.n+1;
  for j := 1 to l do p:=p^.a;
  new(r); r^.n:=y; r^.a:=nil; p^.a:=r;

  p:=v[y];
  l:=p^.n;
  p^.n:=p^.n+1;
  for j := 1 to l do p:=p^.a;
  new(r); r^.n:=x; r^.a:=nil; p^.a:=r;

  end;

i:=0; j:=1;

while i < n do
  begin
  while chk[j]=true do j := j+1;
  sum:=sum+1;
  i:=i+1;
  chk[j]:=true;
  k:=1; kk:=1;
  t[1]:=j;
  while k <=kk do
    begin
    p:=v[t[k]];
    for l := 1 to v[t[k]]^.n do
      begin
      p:=p^.a;
      if chk[p^.n] = false then
        begin
        chk[p^.n] := true;
        i:=i+1;
        kk:=kk+1;
        t[kk]:=p^.n;
        end;
      end;
    k:=k+1;
    end;
  end;

writeln (g, sum);
close (f); close (g);
end.