记录编号 203882 评测结果 AAAAAAAAAA
题目名称 [NOIP 2013]车站分级 最终得分 100
用户昵称 Gravatar神利·代目 是否通过 通过
代码语言 C++ 运行时间 0.400 s
提交时间 2015-11-03 19:26:40 内存使用 16.73 MiB
显示代码纯文本
#include<cstdio>
int EPX,n,m,num,ans,l,r=-1,mid,q[2100],ru[2100];
inline void in(int &TEMP)
{
	for(TEMP=getchar();TEMP<48||TEMP>57;TEMP=getchar());
	TEMP^=48;
	for(EPX=getchar();EPX<58&&EPX>47;EPX=getchar())
		TEMP=(TEMP<<3)+(TEMP<<1)+(EPX^48);
}
bool flag[2100],link[1100][1100];
int shu,u,first[2100];
struct bian
{
	int v,next;
}o[2000000];
inline void add(int u,int v)
{
	o[++shu].v=v;
	o[shu].next=first[u];
	first[u]=shu;
}
int main()
{
	freopen("level2013.in","r",stdin);
	freopen("level2013.out","w",stdout);
	in(n),in(m);
	while(m--)
	{
		in(num);
		for(int i=0;i<num;++i)
		{
			in(q[i]);
			flag[q[i]]=1;
		}
		for(int i=q[0];i<=q[num-1];++i)
		    if(!flag[i])
		        for(int j=0;j<num;++j)
		        {
					if(!link[i][q[j]])
					{
			   			add(i,q[j]);
						++ru[q[j]];
						link[i][q[j]]=1;
					}
		        }
		for(int i=0;i<num;++i)
			flag[q[i]]=0;
	}
	for(int i=1;i<=n;++i)
	    if(!ru[i])
	        q[++r]=i;
	while(l<=r)
	{
		++ans;
		mid=r;
		while(l<=mid)
		{
			u=q[l++];
			for(int i=first[u];i;i=o[i].next)
			{
				--ru[o[i].v];
				if(!ru[o[i].v])
					q[++r]=o[i].v;
			}
		}
	}
	printf("%d",ans);
	//while(1);
}