记录编号 |
203882 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2013]车站分级 |
最终得分 |
100 |
用户昵称 |
神利·代目 |
是否通过 |
通过 |
代码语言 |
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);
}