Cod sursa(job #144693)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 27 februarie 2008 21:12:06
Problema Sortare topologica Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 1.03 kb
type pelem=^elem;
     elem=record
      info:longint;
      next:pelem;
     end;
var fi,fo:text;
    s:array[1..50000]of byte;
    final:array[1..50000]of longint;
    v:array[1..50000]of pelem;
    n,m,i,v1,v2,ct:longint;
procedure push(var first:pelem; vl:longint);
var p:pelem;
begin
  new(p);
  p^.info:=vl;
  p^.next:=first;
  first:=p;
end;
procedure pop(var first:pelem; var vl:longint);
var p:pelem;
begin
  vl:=first^.info;
  p:=first;
  first:=first^.next;
  dispose(p);
end;
procedure df(nod:longint);
var k:longint;
begin
  s[nod]:=1;
  while v[nod]<>nil do
    begin
      pop(v[nod],k);
      if s[k]=0 then df(k);
    end;
  inc(ct);
  final[ct]:=nod;
end;
begin
  assign(fi,'sortaret.in'); reset(fi);
  assign(fo,'sortaret.out'); rewrite(fo);
  read(fi,n,m);
  for i:=1 to m do
    begin
      read(fi,v1,v2);
      push(v[v1],v2);
    end;
  ct:=0;
  for i:=1 to n do
    if s[i]=0 then df(i);
  for i:=ct downto 1 do
    write(fo,final[i],' ');
  close(fi);
  close(fo);
end.