V8ORG - Tổ chức đối lập

Tác giả: ll931110

Ngôn ngữ: Pascal

{$MODE DELPHI}
program V8ORG;
const
  input  = '';
  output = '';
  maxn = 10000;
type
  pnode = ^tnode;
  tnode = record
    val: integer;
    link: pnode;
  end;
var
  n,k,count: integer;
  d,t,pre: array[1..maxn] of integer;
  dep: array[1..maxn] of pnode;

procedure add(i,x: integer);
var
  p: pnode;
begin
  new(p);
  p^.val := x;
  p^.link := dep[i];
  dep[i] := p;
end;

procedure init;
var
  f: text;
  i: integer;
begin
  assign(f, input);
    reset(f);

  read(f, k, n);
  t[1] := 1;
  d[1] := 0;
  for i := 1 to n do dep[i] := nil;

  for i := 2 to n do
    begin
      read(f, pre[i]);
      t[i] := 1;
      d[i] := d[pre[i]] + 1;
      add(d[i],i);
    end;

  close(f);
end;

procedure solve;
var
  v,i: integer;
  p: pnode;
begin
  for i := n downto 1 do
    begin
      p := dep[i];
      while p <> nil do
        begin
          v := p^.val;
          if t[v] >= k then inc(count) else t[pre[v]] := t[pre[v]] + t[v];
          p := p^.link;
        end;
    end;

  if t[1] >= k then inc(count);
end;

procedure printresult;
var
  f: text;
begin
  assign(f, output);
    rewrite(f);
    writeln(f, count);
  close(f);
end;

begin
  init;
  solve;
  printresult;
end.

Download