Cod sursa(job #1172532)

Utilizator Mihai_ChihaiMihai Chihai Mihai_Chihai Data 17 aprilie 2014 17:07:51
Problema Paduri de multimi disjuncte Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 1.33 kb
program Paduri_de_multimi_disjuncte;
 var parent:array[0..100000] of longint;
     n,m,i,j,x,y,op,a,b,g,f,rx,ry,k:longint;

  function find(x:longint):longint;
   begin
    if x=parent[x] then
            find:=x
            else
             begin
              find:=
              find(parent[x]);
              inc(k);
             end;
   end;


 begin
  assign(input,'disjoint.in');
  reset(input);
  assign(output,'disjoint.out');
  rewrite(output);
  readln(n,m);
  for i:=1to n do parent[i]:=i;

  for j:=1 to m do
   begin
    readln(op,x,y);
    if op=1 then begin
            k:=0;
            g:=find(x);
            rx:=k;
            while parent[x]<>g do
              begin
               f:=x;
               x:=parent[f];
               parent[f]:=g;
              end;
            k:=0;
            A:=find(y);
            ry:=k;
            while parent[y]<>a do
               begin
                 b:=y;
                 y:=parent[b];
                 parent[b]:=a;
               end;
            if rx<ry then
            parent[g]:=a
            else parent[a]:=g;
            end
            else
            begin
             if
             find(x)=find(y) then
              writeln('DA') else
              writeln('NU');
             end;

   end;
  readln;
  end.