Cod sursa(job #742452)

Utilizator ctlin04UAIC.VlasCatalin ctlin04 Data 30 aprilie 2012 12:09:50
Problema Paduri de multimi disjuncte Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 1 kb
Program disjoint;
 var tata,rang:array [1..100000] of longint;
     b1,b2:array [1..1 shl 15] of char;
     i,j,op,n,m,x,y:longint;
     fi,fo:text;
function radacina(x:longint):longint;
 var r,aux:longint;
begin
 r:=x;
  while tata[r]<>r do r:=tata[r];
   radacina:=r;
  while tata[x]<>x do begin aux:=tata[x]; tata[x]:=r; x:=aux; end;
end;
procedure uneste(x,y:longint);
begin
 if rang[x]>rang[y] then tata[y]:=x else tata[x]:=y;
  if rang[x]=rang[y] then inc(rang[y]);
 end;
begin
 assign(fi,'disjoint.in');
  assign(fo,'disjoint.out');
 settextbuf(fi,b1); settextbuf(fo,b2);
 reset(fi); rewrite(fo); readln(fi,n,m);
  for i:=1 to n do begin tata[i]:=i; rang[i]:=1; end;
   for i:=1 to m do begin
                     readln(fi,op,x,y);
                      if op=1 then uneste(radacina(x),radacina(y))
                      else if radacina(x)=radacina(y) then writeln(fo,'DA')
                                                 else writeln(fo,'NU');
                     end;
 close(fo);
end.