Cod sursa(job #582116)

Utilizator promix2012petruta andrei promix2012 Data 14 aprilie 2011 21:21:43
Problema Componente tare conexe Scor 30
Compilator fpc Status done
Runda Arhiva educationala Marime 1.41 kb
program ctc;
const fi='ctc.in';
      fo='ctc.out';
var f:text;
g:text;
    var a,tr:array of array of longint;
       v:array[1..100000] of 0..1;
       viz:array[1..100000] of longint;
       bufin,bufout:array[1..65000] of byte;
       ve:array of array of longint;
       n,m,i,c,d,nr,l:longint;
       s:ansistring;
       s1:string;
procedure df(nod:longint);
var j:longint;
begin
v[nod]:=1;
for j:=1 to a[nod,0] do
   if v[a[nod,j]]=0 then
      df(a[nod,j]);
end;
procedure trs(nod:longint);
var j:longint;
begin
if v[nod]=1 then
begin
inc(ve[nr,0]);
setlength(ve[nr],ve[nr,0]+1);
ve[nr,ve[nr,0]]:=nod;
viz[nod]:=1;
end;
for j:=1 to tr[nod,0] do
   if viz[tr[nod,j]]=0 then
      trs(tr[nod,j]);
end;
begin
assign(f,fi);
reset(f);
assign(g,fo);
rewrite(g);
settextbuf(f,bufin);
settextbuf(g,bufout);
read(f,n,m);
setlength(a,n+1,1);
setlength(tr,n+1,1);
for i:=1 to m do
  begin
  read(f,c,d);
  setlength(a[c],a[c,0]+2);
  setlength(tr[d],tr[d,0]+2);
  inc(a[c,0]);
  a[c,a[c,0]]:=d;
  inc(tr[d,0]);
  tr[d,tr[d,0]]:=c;
  end;
for i:=1 to n do
  begin
  if viz[i]=0 then
  begin
 fillchar(v,sizeof(v),0);
  inc(nr);
 setlength(ve,nr+1);
 setlength(ve[nr],1);
  df(i);
  trs(i);


  end;
  end;
  writeln(g,nr);
  for i:=1 to nr do
  begin
     for l:=1 to ve[i,0] do
         write(g,ve[i,l],' ');
        writeln(g);
  end;
  close(f);
  close(g);
  end.