Cod sursa(job #698430)

Utilizator mada0222Tomus Madalina mada0222 Data 29 februarie 2012 13:58:47
Problema Componente tare conexe Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 1.35 kb
program sss;
var f,g:text;
    n,i,m,x,y,nr,J,c,nr2:longint;
    a,t:array of array of longint;
    viz:array[0..100001] of 0..1;
    post:array[0..100001] of longint;
    b:array[0..10000,0..10000] of longint;
procedure dfs(k:longint);
begin
viz[k]:=1;
  for j:=1 to a[k,0] do
      if viz[a[k,j]]=0 then
         dfs(a[k,j]);
      nr:=nr+1;
      post[nr]:=k;
end;
procedure dfst(k:longint);
begin
viz[k]:=0;
nr2:=nr2+1;
b[c,nr2]:=k;
     for j:=1 to t[k,0] do
       if viz[t[k,j]]=1 then
        dfst(t[k,j]);
end;
begin
assign(f,'ctc.in'); reset(f);
assign(g,'ctc.out'); rewrite(g);
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);
      setlength(a[x],length(a[x])+1);
      a[x,0]:=a[x,0]+1;
      a[x,a[x,0]]:=y;
      setlength(t[y],length(t[y])+1);
      t[y,0]:=t[y,0]+1;
      t[y,t[y,0]]:=x;
    end;
    nr:=0; c:=0;
    for i:=1 to n do
      if viz[i]=0 then
      begin
        dfs(i);
      end;
    for i:=nr downto 1 do
      begin
      if viz[post[i]]=1 then
        begin
        c:=c+1;
        nr2:=0;
        dfst(post[i]);
        b[c,0]:=nr2;
        end;
      end;
    writeln(g,c);
    for i:=1 to c do
    begin
      for j:=1 to b[i,0] do
        write(g,b[i,j],'  ');
      writeln(g);
    end;
close(f);
close(g);
end.