记录编号 127925 评测结果 AAAAAAAAAA
题目名称 [USACO Dec08] 奶牛的糖果 最终得分 100
用户昵称 Gravatar乌龙猹 是否通过 通过
代码语言 C++ 运行时间 0.164 s
提交时间 2014-10-16 16:53:21 内存使用 1.53 MiB
显示代码纯文本
#include<cstdio>
using namespace std;
int n;
int f[100001],to[100001],o[100001];
bool bo[100001];
int dfs(int,int);
int main()
{
	freopen("treat.in","r",stdin);
	freopen("treat.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&to[i]);
	for(int i=1;i<=n;i++)
	{
		f[i]=dfs(i,1);
		printf("%d\n",f[i]);
	}
	return 0;
}
int dfs(int k,int d)
{
	if(f[k]) return f[k];
	bo[k]=1;
	o[k]=d;
	if(!bo[to[k]] || f[to[k]])
	{
		int sum=dfs(to[k],d+1);
		if(!f[k]) f[k]=sum+1;
	}
	else
	{
		f[k]=o[k]-o[to[k]]+1;
		int x=to[k];
		while(x!=k)
		{
			f[x]=f[k];
			x=to[x];
		}
	}
	return f[k];
}