Cod sursa(job #1181515)

Utilizator azkabancont-vechi azkaban Data 2 mai 2014 22:26:56
Problema Paduri de multimi disjuncte Scor 10
Compilator fpc Status done
Runda Arhiva educationala Marime 1.38 kb
Program paduri;
var tata,rank :array[1..100006] of longint;
    a,b,n,i,j,m,nr  :longint;
    b1,b2 : array [0..1 shl 17] of char;

procedure actualizare_tata (pf: longint);
var p2,r : longint;
begin
  r:=pf;
  while tata[r]<>r do
      while pf<>tata[pf] do begin
                                p2:=tata[pf];
                                tata[pf]:=r;
                                pf:=p2;
                           end;
      tata[pf]:=r;
end;

procedure alege_rank (nod1:longint; nod2 : longint);
    begin
         if rank[nod1]=rank[nod2] then rank[nod2]:=rank[nod2]+1;
         if rank[nod1]<rank[nod2] then actualizare_tata(nod1)
                                  else
         if rank[nod1]>rank[nod2] then actualizare_tata(nod2);
    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 rank[i]:=1;
    for j:=1 to m do begin
                          readln(nr,a,b);
              case nr of
                         1 : alege_rank(tata[a],tata[b]);

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

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

end.