比赛 暑假综合模拟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;
}