MESSAGE - Truyền tin

Tác giả: ll931110

Ngôn ngữ: Pascal

{$MODE DELPHI}
Program MESS;
Const
  input  = '';
  output = '';
  maxn = 800;
Var
  a: array[1..maxn,1..maxn] of boolean;
  free: array[1..maxn] of boolean;
  list,num: array[1..maxn] of integer;
  n,m,count: integer;

Procedure init;
Var
  f: text;
  i,u,v: integer;
Begin
  Assign(f, input);
    Reset(f);

  Readln(f, n, m);
  Fillchar(a, sizeof(a), false);

  For i:= 1 to m do
    Begin
      Readln(f, u, v);
      a[u,v]:= true;
    End;

  Close(f);
End;

Procedure visit(u: integer);
Var
  v: integer;
Begin
  free[u]:= false;
  For v:= 1 to n do
    if a[u,v] and free[v] then
      Begin
        free[v]:= false;
        visit(v);
      End;

  inc(count);
  list[u]:= count;
End;

Procedure solve;
Var
  f: text;
  i,res: integer;
Begin
  count:= 0;
  Fillchar(free, sizeof(free), true);
  For i:= 1 to n do
    if free[i] then visit(i);

  For i:= 1 to n do num[list[i]]:= i;

  res:= 0;
  Fillchar(free, sizeof(free), true);
  For i:= n downto 1 do
    if free[num[i]] then
      Begin
        inc(res);
        visit(num[i]);
      End;

  Assign(f, output);
    Rewrite(f);
    Writeln(f, res);
  Close(f);
End;

Begin
  init;
  solve;
End.

Download