记录编号 112961 评测结果 AAAAAAAAAA
题目名称 [USACO Dec08] 奶牛的糖果 最终得分 100
用户昵称 GravatarFoolMike 是否通过 通过
代码语言 Pascal 运行时间 0.207 s
提交时间 2014-07-17 20:27:46 内存使用 1.31 MiB
显示代码纯文本
var
c,d,n:longint;
a,b,ans:array[1..100000]of longint;

procedure treat(w:longint);
var
i,j:longint;
begin
i:=w;
while (b[a[i]]<>c)and(ans[a[i]]=0) do
  begin
  b[a[i]]:=c;
  i:=a[i];
  inc(ans[c]);
  end;
if (ans[a[i]]>0)and(b[a[i]]<>c) then ans[c]:=ans[c]+ans[a[i]];
if b[a[i]]=c then
begin
i:=a[i];
j:=w;
while j<>i do
  begin
  ans[a[j]]:=ans[j]-1;
  j:=a[j];
  end;
j:=a[j];
while j<>i do
  begin
  ans[j]:=ans[i];
  j:=a[j];
  end;
end;
end;

begin
assign(input,'treat.in');
assign(output,'treat.out');
reset(input);
rewrite(output);

read(n);
for c:=1 to n do
read(a[c]);

for c:=1 to n do
if ans[c]=0 then
  begin
  ans[c]:=1;
  b[c]:=c;
  treat(c);
  end;

for c:=1 to n do
writeln(ans[c]);
close(input);close(output);
end.