Cod sursa(job #457500)

Utilizator Antika89noname Antika89 Data 19 mai 2010 21:29:16
Problema Paduri de multimi disjuncte Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 1.37 kb
var n,m,i,j,x,y,kod,a,b,c,d:longint;
    v,rang:array [1..1000001] of longint;
    f,g:text;
begin
assign(f,'disjoint.in');
reset(f);
assign(g,'disjoint.out');
rewrite(g);
  readln(f,n,m);

  for i:=1 to n do
   v[i]:=i;
  for i:=1 to m do
   begin
     readln(f,kod,x,y);

   if kod=1
   then begin
     if rang[v[x]]<rang[v[y]]
     then
       begin
         a:=x;
         while (a<>v[a]) do
          a:=v[a];
          c:=y;
          while(c<>v[c]) do
            c:=v[c];
          v[a]:=v[c];
          rang[c]:=rang[c]+1;
       end
     else
       begin
         a:=x;
         while a<>v[a] do
           a:=v[a];
         while c<>v[c] do
          c:=v[c];
          v[c]:=v[a];
          rang[a]:=rang[a]+1;
       end;
    end;
       if kod=2
       then
         begin
           while a<>v[a]
            do
            a:=v[a];

             while x<>v[x]
             do begin
               b:=v[x];
               v[x]:=a;
               x:=b;
             end;
             c:=y;
           while c<>v[c] do
           c:=v[c];
           while x<>v[x] do
           begin
             d:=v[x];
             v[x]:=c;
             x:=d;
           end;

          if a=c
           then
            writeln(g,'DA')
           else
           writeln(g,'NU');
      end;
   end;

close(f);
close(g);
end.