Cod sursa(job #1375065)

Utilizator mirelabocsabocsa mirela mirelabocsa Data 5 martie 2015 11:57:08
Problema Componente tare conexe Scor 60
Compilator fpc Status done
Runda Arhiva educationala Marime 1.46 kb
program mire;
var t,a:array[0..2,0..500000] of longint;
     n,m,nr,nrc,i,j:longint;
     start,start1,v:array[0..500000] of longint;
     f,g:text;
     viz:array[0..500000] of longint;
procedure citire;
var i,k,x,y:longint;
begin
  assign(f,'ctc.in'); reset(f);
    readln(f,n,m);
    k:=0;
    for i:=1 to m do
      begin
         readln(F,x,y);
         inc(k);
         a[0,k]:=y;
         a[1,k]:=start[x];
         start[x]:=k;
         t[0,k]:=x;
         t[1,k]:=start1[y];
         start1[y]:=k;
      end;
  close(f);
end;
procedure so(nod:longint);
var i,p:longint;
begin
  viz[nod]:=1;
  p:=start[nod];
  while p<>0 do
    begin
      if viz[a[0,p]]=0 then
       so(a[0,p]);
      p:=a[1,p];
    end;
    dec(nr);
    v[nr]:=nod;
end;
procedure df(nod,c:longint);
var p,i:longint;
begin
  viz[nod]:=c;
   p:=start1[nod];
   while p<>0 do
     begin
       if viz[t[0,p]]=0 then
          df(t[0,p],c);
        p:=t[1,p];
     end;
end;
begin
  citire;
  nr:=n+1;
  for i:=1 to n do
    if viz[i]=0 then
      so(i);
    nrc:=0;
  for i:=1 to n do
    viz[i]:=0;
  for i:=1 to n do
    if viz[v[i]]=0  then
      begin
        inc(nrc);
        df(v[i],nrc);
      end;
   assign(g,'ctc.out'); rewrite(g);
     writeln(g,nrc);
     for i:=1 to nrc do
       begin
          for j:=1 to n do
            if viz[j]=i then
               write(g,j,' ');
             writeln(g);
       end;
   close(g);
end.