Cod sursa(job #1612579)

Utilizator mirelabocsabocsa mirela mirelabocsa Data 24 februarie 2016 22:21:30
Problema Componente tare conexe Scor 90
Compilator fpc Status done
Runda Arhiva educationala Marime 1.47 kb
program mire;
var f,g:text;
    a,t,b:array of array of longint;
    v:array of longint;
    viz:array of 0..1;
    nrc,nr,i,j,n,m:longint;
procedure citire;
var i,x,y:longint;
begin
  assign(f,'ctc.in'); reset(f);
   assign(g,'ctc.out'); rewrite(g);
    readln(f,n,m);
     setlength(a,n+1,1);
       setlength(v,n+1);
         setlength(viz,n+1);
       setlength(t,n+1,1);
       setlength(b,n+1,1);
     for i:=1 to m do
       begin
          readln(f,x,y);
          inc(a[x,0]);
          setlength(a[x],a[x,0]+1);
          a[x,a[x,0]]:=y;
          inc(t[y,0]);
          setlength(t[y],t[y,0]+1);
          t[y,t[y,0]]:=x;
       end;

  close(f);
end;
procedure topo(nod:longint);
var i:longint;
begin
  viz[nod]:=1;
  for i:=1 to a[nod,0] do
    if viz[a[nod,i]]=0 then
      topo(a[nod,i]);
   dec(nr);
   v[nr]:=nod;
end;
procedure df(nod:longint);
var i:longint;
begin
 viz[nod]:=1;
 inc(b[nrc,0]);
 setlength(b[nrc],b[nrc,0]+1);
 b[nrc,b[nrc,0]]:=nod;
 for i:=1 to t[nod,0] do
   if viz[t[nod,i]]=0 then
     df(t[nod,i]);
end;
begin
   citire;
   nr:=n+1;
   for j:=1 to n do
     if viz[j]=0 then
        topo(j);
  for j:=1 to n do
    viz[j]:=0;
   nrc:=0;
  for j:=1 to n do
    if viz[v[j]]=0 then
      begin
        inc(nrc);
        df(v[j]);
      end;
      writeln(g,nrc);
   for i:=1 to nrc do
   begin
     for j:=1 to b[i,0] do
       write(g,b[i,j],' ');
    writeln(g);
   end;
  close(g);
end.