记录编号 192625 评测结果 AAAAAAAAAA
题目名称 [POI 2002]滑雪者 最终得分 100
用户昵称 Gravatarmikumikumi 是否通过 通过
代码语言 C++ 运行时间 0.060 s
提交时间 2015-10-12 07:40:48 内存使用 98.86 MiB
显示代码纯文本
#include<cstdio>
#include<deque>
#include<cmath>
#include<iostream>
using namespace std;
const int SIZEN=5010;
int N,father[SIZEN],f[SIZEN][SIZEN],ans=0;
deque<int> s[SIZEN];
bool co[SIZEN]={0};
void read()
{
	scanf("%d",&N);
	int k,to;
	for(int i=1;i<=N;i++)
	{
		scanf("%d",&k);
		for(int j=1;j<=k;j++) 
		{
			scanf("%d",&to);
			s[i].push_back(to);
		}
	}
}
void dfs(int x)
{
	for(int i=0;i<s[x].size();i++)
	{
		int v=s[x][i];
		if(!co[v])
		{
			father[v]=x;
			dfs(v);
		}
		else
		{
			int now=0,vl=v,vh=v;
			while(co[vh])
			{
				now=max(now,f[vh][father[vh]]);
				vh=father[vh];
			}
			now++;
			ans=max(ans,now);
			father[v]=x;
			while(vl!=vh)
			{
				f[vl][father[vl]]=now;
				vl=father[vl];
			}
		}
	}
	co[x]=1;
}
int main()
{
	freopen("skiers.in","r",stdin);
	freopen("skiers.out","w",stdout);
	read();
	co[N]=1;
	dfs(1);
	printf("%d",ans);
	return 0;
}