Cod sursa(job #1173711)

Utilizator vasica38Vasile Catana vasica38 Data 20 aprilie 2014 18:06:27
Problema Paduri de multimi disjuncte Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 0.94 kb
program p1;
var tata, rang:array[0..100005] of longint;
    i,n,j,k,u,o,x,y,m:longint;
    f,g:Text;
    b1,b2:array[0..1 shl 20 ] of char;
function radacina(x:longint):longint;
begin
 while tata[x]<>x do x:=tata[x];
radacina:=x;
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(f,'disjoint.in');reset(F);
assign(g,'disjoint.out');rewrite(G);
settextbuf(f,b1);
settextbuf(g,b2);
readln(f,n,m);
 for i:=1 to n do begin
                tata[i]:=i;
                rang[i]:=1;
                   end;
 for i:=1to m do
        begin
                readln(f,o,x,y);
                if o=1 then uneste(radacina(x),radacina(Y))
                        else
                        if radacina(x)=radacina(y) then writeln(g,'DA')
                                else writeln(g,'NU');
        end;
close(F);
close(G);
end.