Cod sursa(job #293683)

Utilizator SprzlAbcdefg Sprzl Data 1 aprilie 2009 23:51:26
Problema Paduri de multimi disjuncte Scor 10
Compilator fpc Status done
Runda Arhiva educationala Marime 0.95 kb
program mult_disjuncte;
type lista = ^articol;
     articol =record
               lider:lista;
               end;
var op,i,k,p,n,m:longint;
    a:array [1..100000] of lista;
procedure union(k,p:longint);
var xk,xp:lista;
begin
  xk:=a[k];
  xp:=a[p];

  while xk<>xk^.lider do
    xk:=xk^.lider;

  while xp<>xp^.lider do
    xp:=xp^.lider;

  a[k]^.lider:=xp;
end;

procedure query(p,k:longint);
begin
  if a[p]^.lider=a[k]^.lider then
    writeln('DA')
  else
    writeln('NU');
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];
  end;

  for i:=1 to m do
  begin
    readln(op,p,k);
    if op = 1 then
    begin
      if p>k then
        union(k,p)
      else
        union(p,k);
    end
    else
      query(p,k);
  end;

  close(input);
  close(output);
end.