Cod sursa(job #1181454)

Utilizator azkabancont-vechi azkaban Data 2 mai 2014 19:57:57
Problema Paduri de multimi disjuncte Scor 10
Compilator fpc Status done
Runda Arhiva educationala Marime 1.92 kb
program paduri;
type lista=^celula;
       celula=record
         info:longint;
         pred:lista;
       end;

var lda:array[1..100000] of lista;
    viz:array[0..100000] of longint;
    a,b,n,i,nr,k,j,m,ok:longint;
    r : lista;
    b1,b2 : array [0..1 shl 17] of char;

procedure add(v:longint; var p:lista);
   var r:lista;
    begin
         new(r);
         r^.info:=v;
         r^.pred:=p;
         p:=r;
    end;

procedure dfs(nod:longint);
    var r:lista;
    begin
          if viz[nod]=1 then ok:=1
                        else
          begin
          viz[nod]:=1;
          r:=lda[nod];
          if r<>nil then
              while r<>nil do begin
                               if viz[r^.info]=0 then dfs(r^.info);
                               r:=r^.pred;
                           end;
          end;

    end;

begin
    assign(input,'disjoint.in'); settextbuf(input,b1); reset(input);
    assign(output,'disjoint.out'); settextbuf(output,b2); rewrite(output);
    readln(n,m);
    for j:=1 to m do begin
                          readln(nr,a,b);
                          ok:=0;
              case nr of
                         1 : add(a,lda[b]);
                         2 : begin
                                 if a=b then writeln('DA')
                                        else begin
                                                  for i:=1 to n do viz[i]:=0;
                                                  dfs(a);
                                                  dfs(b);
                                                  if ok=0 then writeln('NU')
                                                          else
                                                  if ok=1 then writeln('DA');
                                             end;
                             end;
                         end;
              end;
   close(input);
   close(output);

end.