Cod sursa(job #1417848)

Utilizator laura.calimanLaura Caliman laura.caliman Data 11 aprilie 2015 11:29:01
Problema Paduri de multimi disjuncte Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 0.94 kb
var n,m,i,j,k,x,y,t:longint;
    a:array[1..100000] of longint;
    
procedure parinte(x,y,p:longint);
begin
  while y<>a[y] do begin
    y:=a[y];
    a[y]:=p;
  end;
  while x<>a[x] do begin
    x:=a[x];
    a[x]:=p;
  end;
end;
    
procedure oper1(x,y:longint);
var j,t:longint;
begin
  j:=x;
  t:=y;
  while t<>a[t] do
    t:=a[t];
  while j<>a[j] do
    j:=a[j];
  a[j]:=a[t];
  parinte(x,y,a[t]);
end;
    
procedure oper2(x,y:longint);
var r,t:longint;
begin
  r:=x;
  t:=y;
  while y<>a[y] do
    y:=a[y];
  while x<>a[x] do
    x:=a[x];
  if a[x]=a[y] then begin
    writeln('DA');
    parinte(r,t,a[y]);
  end else writeln('NU');
end;
    
begin
  assign(input,'disjoint.in');
  assign(output,'disjoint.out');
  reset(input);
  rewrite(output);
  read(n,m);
  for i:=1 to n do a[i]:=i;
  for i:=1 to m do begin
    read(k,x,y);
    if k=2 then oper2(x,y);
    if k=1 then oper1(x,y);
  end;
end.