Cod sursa(job #294271)

Utilizator SprzlAbcdefg Sprzl Data 2 aprilie 2009 13:42:51
Problema Paduri de multimi disjuncte Scor 80
Compilator fpc Status done
Runda Arhiva educationala Marime 1.37 kb
program disjoint;   
type lista = ^articol;   
     articol = record  
               lungime:longint;   
               lider:lista;   
               end;   
  
var a:array [1..100000] of lista;   
    i,m,n,k,p,op:longint;   
    xp,xk:lista;   
procedure conectare(p,k:longint);   
begin  
  xp:=a[k];   
  xk:=a[p];   
  
  while xp<>xp^.lider do  
    xp:=xp^.lider;   
  
  while xk<>xk^.lider do  
    xk:=xk^.lider;   
  
  xp^.lider:=xk;   
  xk^.lungime:=xk^.lungime+xp^.lungime;   
  
end;   
  
begin  
  assign(input,'disjoint.in');   
  assign(output,'disjoint.out');   
  reset(input);   
  rewrite(output);   
  
  readln(n,m);   
  
  for i:=1 to n do  
  begin  
    new(a[i]);   
    a[i]^.lider:=a[i];   
    a[i]^.lungime:=1;   
  end;   
  
  for i:=1 to m do  
  begin  
    readln(op,k,p);   
    if op = 1 then  
    begin  
      if a[k]^.lungime>a[p]^.lungime then  
        conectare(p,k)   
      else  
        conectare(k,p);   
    end  
    else  
    begin  
      xp:=a[k];   
      xk:=a[p];   
  
      while xp<>xp^.lider do  
        xp:=xp^.lider;   
  
      while xk<>xk^.lider do  
        xk:=xk^.lider;   
  
      if xp^.lider = xk^.lider then  
        writeln('DA')   
      else  
        writeln('NU');   
    end;   
  end;   
  
  close(input);   
  close(output);   
  
end.