Cod sursa(job #545693)

Utilizator boti12botiGal Botond boti12boti Data 3 martie 2011 20:23:16
Problema Componente tare conexe Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 1.14 kb
type mat=array[1..25000,1..25000] of 0..3;
     vek=array[1..5000] of boolean;
var f:text; i,j,a,b,n,m:integer; v1,v2:vek; x:mat;
procedure df1(k:integer);
  var i:integer;
  begin
    v1[k]:=true;
    for i:=1 to n do begin
      if ((x[k,i]=1)or(x[k,i]=3))and(not v1[i]) then df1(i);
      end;
  end;

procedure df2(k:integer);
  var i:integer;
  begin
    v2[k]:=true;
    for i:=1 to n do begin
      if ((x[k,i]=2)or(x[k,i]=3))and(not v2[i]) then df2(i);
      end;
  end;
begin
  assign(f,'ctc.in');
  reset(f);
  readln(f,n,m);
  for i:=1 to m do begin
    readln(f,a,b);
    if x[a,b]=0 then begin x[a,b]:=1; x[b,a]:=2; end
    else begin x[a,b]:=3; x[b,a]:=3; end;
  end;
  close(f);
  a:=0;  b:=0;
  assign(f,'ctc.out');
  rewrite(f);
    for i:=1 to n do begin
    v1[i]:=false;
    v2[i]:=false;
    end;

  repeat
  i:=1;
   while (i<n) and v2[i] do begin inc(i); end;
   a:=i;
  for i:=1 to n do begin
    v1[i]:=false;
    v2[i]:=false;
    end;

  df1(a);

  df2(a);

  writeln(f);
  for i:=1 to n do
   if v1[i]=v2[i] then begin inc(b); write(f,i,' '); end;
  until b=n;
  close(f);
end.