Cod sursa(job #1181492)

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

var lda:array[1..100000] of lista;
    tata,rang:array[1..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 aktualizare(nod,tata_nod : longint);
var r : lista;
begin
     r:=lda[nod];
     tata[nod]:=tata_nod;
     while r<>nil do begin
                          aktualizare(r^.info,tata_nod);
                          r:=r^.pred;
                    end;
end;

procedure add(nod:longint; tata_nod : longint; var p : lista);
   var r:lista;
    begin
         new(r);
         r^.info:=nod;
         r^.pred:=p;
         p:=r;
         if rang[nod]=rang[tata_nod] then begin
                                               rang[tata_nod]:=rang[tata_nod]+1;
                                               aktualizare(nod,tata_nod);
                                           end
         else if rang[nod]>rang[tata_nod]  then aktualizare(tata_nod,nod);
    end;

begin
    assign(input,'disjoint.in'); settextbuf(input,b1); reset(input);
    assign(output,'disjoint.out'); settextbuf(output,b2); rewrite(output);
    readln(n,m);
    for i:=1 to n do tata[i]:=i;
    for i:=1 to n do rang[i]:=1;
    for j:=1 to m do begin
                          readln(nr,a,b);
              case nr of
                         1 : add(b,a,lda[a]);

                         2 : if tata[a]=tata[b] then writeln('DA')
                                                else writeln('NU');

                      end;
                end;
   close(input);
   close(output);

end.