Cod sursa(job #1378694)

Utilizator trifa_mariaTrifa Maria trifa_maria Data 6 martie 2015 13:45:13
Problema Componente tare conexe Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 1.79 kb
program ctc;
var f,g:text;
    a,t,b:array of array of longint;
    viz,v:array of longint;
    n,m,i,nr,nrc,j:longint;
    bufin,bufout:array[1..65000] of byte;
procedure citire;
var i,x,y:longint;
   begin
        readln(f,n,m);
        setlength(a,n+1,1);
        setlength(t,n+1,1);
        for i:=1 to m do
            begin
               readln(f,x,y);
               inc(a[x,0]);
               inc(t[y,0]);
               setlength(a[x],a[x,0]+1);
               setlength(t[y],t[y,0]+1);
               a[x,a[x,0]]:=y;
               t[y,t[y,0]]:=x;
            end;
   end;
procedure dft(nod:longint); ///sortarea topologica
var i:longint;
   begin
      viz[nod]:=1;
      for i:=1 to a[nod,0] do
         if viz[a[nod,i]]=0 then
             dft(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
     assign(f,'ctc.in');
     reset(f);
     assign(g,'ctc.out');
     rewrite(g);
     settextbuf(f,bufin);
     settextbuf(g,bufout);
     citire;
     setlength(viz,n+1);
     setlength(v,n+1);
     nr:=n+1;
     for i:=1 to n do
        if viz[i]=0 then
            dft(i);
     for i:=1 to n do
        viz[i]:=0;
     nrc:=0;
     setlength(b,n+1,1);
     for i:=1 to n do
        if viz[v[i]]=0 then
            begin
               inc(nrc);
               df(v[i]);
            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(f);
     close(g);
end.