Cod sursa(job #408468)

Utilizator hungntnktpHungntnktp hungntnktp Data 3 martie 2010 03:36:24
Problema Heapuri Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 1.86 kb
{$M 64000000,0}
{$H-,I+,Q+,R+,S+}
{La hoang
Ngay 3-3-2010}
const
   TFI  = 'sortaret.in';
   TFO  = 'sortaret.out';
   MaxN = 50001;
   MaxM = 100000;
type
   ee = record
            u, v: longint;
        end;
var
   n, m, count: longint;
   E: array[1..MaxM] of ee;
   Ke, Vt: array[1..MaxM] of longint;
   F: array[1..MaxN] of longint;
   Free: array[1..MaxN] of boolean;
   (*-----------------------------------*)
   procedure Input;
   var
      fi: text;
      i:longint;
   begin
      Assign(fi, TFI); Reset(fi);
      Fillchar(Vt, sizeof(Vt), 0);
      Readln(fi, n, m);
      for i := 1 to m do
         With E[i] do
            begin
               Readln(fi, u, v);
               inc(Vt[u]);
            end;
      inc(Vt[1]);
      for i := 2 to n do Vt[i] := Vt[i - 1] + Vt[i];
      Vt[n + 1] := Vt[n];
      for i := 1 to m do
         With E[i] do
         begin
            dec(Vt[u]);
            Ke[Vt[u]] := v;
         end;
      Close(fi);
   end;
   (*-----------------------------------*)
   procedure Dfs(u: longint);
   var
      i, v: longint;
   begin
      Free[u] := false;
      for i := Vt[u] to Vt[u + 1] - 1 do
         begin
            v := Ke[i];
            if Free[v] then Dfs(v);
         end;
      F[count] := u;
      dec(count);
   end;
   (*-----------------------------------*)
   procedure Process;
   var
      i: longint;
   begin
      Fillchar(Free, sizeof(Free), true);
      count := n;
      for i := 1 to n do
         if Free[i] then Dfs(i);
   end;
   (*-----------------------------------*)
   procedure Output;
   var
      fo: text;
      i: longint;
   begin
      Assign(fo, TFO); Rewrite(fo);
      for i := 1 to n do Write(fo, F[i], ' ');
      Close(fo);
   end;
   (*-----------------------------------*)
begin
   Input;
   Process;
   Output;
end.