Cod sursa(job #294294)

Utilizator SprzlAbcdefg Sprzl Data 2 aprilie 2009 13:55:21
Problema Paduri de multimi disjuncte Scor 80
Compilator fpc Status done
Runda Arhiva educationala Marime 1.19 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.