Cod sursa(job #553718)

Utilizator boti12botiGal Botond boti12boti Data 14 martie 2011 11:54:01
Problema Componente tare conexe Scor 30
Compilator fpc Status done
Runda Arhiva educationala Marime 1.55 kb
type mat=array[1..5000,1..5000] of 0..3;
     vak=array[1..50000] of integer;
     vek=array[1..25000] of boolean;
var f:text; i,j,a,b,n,m,d,h,h1,c:integer; v1,v2,jr:vek; x:mat;  q:vak;
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);    d:=0; h:=0;
  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;
    for i:=1 to n do
      jr[i]:=false;

  for i:=1 to n do q[i]:=0;
  repeat
  i:=1;
   while (i<n) and jr[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);
           inc(d);     h1:=0;
  for i:=1 to n do
   if v1[i] and v2[i] then begin inc(b);inc(h1); end;
   inc(h); q[h]:=h1;
  for i:=1 to n do
   if v1[i] and v2[i] then begin inc(h); q[h]:=i; jr[i]:=true; end;

  until b=n;

  write(f,d); c:=0;
  while c<h do begin
  inc(c);
  writeln(f);
    for j:=1 to q[c] do  begin
      inc(c); write(f,q[c],' ');
      end;
      end;
  close(f);
end.