Nu aveti permisiuni pentru a descarca fisierul grader_test37.in

Cod sursa(job #1373876)

Utilizator mirelabocsabocsa mirela mirelabocsa Data 4 martie 2015 21:08:07
Problema Componente tare conexe Scor 90
Compilator fpc Status done
Runda Arhiva educationala Marime 1.48 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);
    readln(f,n,m);
    setlength(viz,n+2);
    setlength(v,n+1);
    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;
  close(f);
end;
procedure so(nod:longint);
var i:longint;
begin
  viz[nod]:=1;
  for i:=1 to a[nod,0] do
    if viz[a[nod,i]]=0 then
      so(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 i:=1 to n do
    if viz[i]=0 then
      so(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
               nrc:=nrc+1;
                df(v[i]);
         end;
  assign(g,'ctc.out'); rewrite(g);
    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.