比赛 |
暑假综合模拟2 |
评测结果 |
AAAAAAAAAA |
题目名称 |
车站分级 |
最终得分 |
100 |
用户昵称 |
CloudTower |
运行时间 |
1.087 s |
代码语言 |
C++ |
内存使用 |
19.35 MiB |
提交时间 |
2018-08-07 20:40:59 |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
int n,m;
struct edge{
int nxt,to;
}e[3000010];
int cnt,head[1010],ans;
bool is[1010],vis[1010][1010];
int a[1010],in[1010],dep[1010];
void add(int x,int y)
{
e[++cnt].to=y;
e[cnt].nxt=head[x];
head[x]=cnt;
}
queue<int> q;
void topo()
{
for(int i=1;i<=n;i++)
if(in[i]==0){
q.push(i);dep[i]=1;
}
while(!q.empty())
{
int to=q.front();q.pop();
for(int i=head[to];i;i=e[i].nxt)
{
int v=e[i].to;
dep[v]=dep[to]+1;
in[v]--;
ans=max(ans,dep[v]);
if(in[v]==0)q.push(v);
}
}
}
int main()
{
freopen("level2013.in","r",stdin);
freopen("level2013.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=m;i++)
{
memset(is,0,sizeof(is));
memset(a,0,sizeof(a));
int nn;
cin>>nn;
for(int j=1;j<=nn;j++)
{
cin>>a[j];
is[a[j]]=1;
}
for(int j=a[1]+1;j<=a[nn];j++)
{
if(!is[j])
{
for(int z=1;z<=nn;z++)
{
if(!vis[j][a[z]])
{
in[a[z]]++;
add(j,a[z]);
vis[j][a[z]]=1;
}
}
}
}
}
topo();
cout<<ans;
return 0;
}