Cod sursa(job #1367011)

Utilizator mihai1996Toader Mihai mihai1996 Data 1 martie 2015 15:47:00
Problema Componente tare conexe Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 1.49 kb
program ctc_2;
var g,gt,ctc:array of array of longint;
    viz1,viz2:array[1..100000] of 0..1;
    sol:array[1..100000] of longint;
    i,k,x,y,n,m,nr,j:longint;
    bufin,bufout:array[1..65535] of byte;
procedure df1(nod:longint);
var i:longint;
begin
   viz1[nod]:=1;
   for i:=1 to g[nod,0] do
     if viz1[g[nod,i]]=0 then
       df1(g[nod,i]);
   inc(k);
   sol[k]:=nod;
end;

procedure df2(nod:longint);
var i:longint;
begin
  viz2[nod]:=1;
  for i:=1 to gt[nod,0] do
    if viz2[gt[nod,i]]=0 then
       df2(gt[nod,i]);

  ctc[nr,0]:=ctc[nr,0]+1;
  setlength(ctc[nr],ctc[nr,0]+1);
  ctc[nr,ctc[nr,0]]:=nod;
end;

begin
   assign(input,'ctc.in'); reset(input);
   assign(output,'ctc.out'); rewrite(output);
   settextbuf(input,bufin);
   settextbuf(output,bufout);
   readln(n,m);
   setlength(g,n+1,1);
   setlength(gt,n+1,1);
   for i:=1 to m do
     begin
        readln(x,y);
        inc(g[x,0]);
        setlength(g[x],g[x,0]+1);
        g[x,g[x,0]]:=y;
        inc(gt[y,0]);
        setlength(gt[y],gt[y,0]+1);
        gt[y,gt[y,0]]:=x;

     end;
   k:=0;
   for i:=1 to n do
     if viz1[i]=0 then
       df1(i);
   nr:=0;
   setlength(ctc,n+1,1);
   for i:=n downto 1 do
     if viz2[sol[i]]=0 then
       begin
         inc(nr);

         df2(sol[i]);
       end;
   writeln(nr);
   for i:=1 to nr do
     begin
       for j:=1 to ctc[i,0] do
          write(ctc[i,j],' ');
       writeln;
     end;
   close(input); close(output);

end.