RE 求助
查看原帖
RE 求助
251130
lovely_ckj楼主2021/8/4 08:38

rt,萌新刚学 OI,不知道为啥会 RE……

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>

#define S 1000005
#define MS 100005

using namespace std;

int n,m,stop[MS];
int esum,to[S],nxt[S],h[MS];
int ind[MS],lev[MS];
int ans;

inline void add(int x,int y)
{
	to[++esum]=y;
	nxt[esum]=h[x];
	h[x]=esum;
}

int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		int s;
		scanf("%d",&s);
		for(int j=1;j<=s;j++)
		{
			scanf("%d",&stop[j]);
		}
		for(int j=stop[1];j<=stop[s];j++)
		{
			bool f=false;
			for(int k=1;k<=s;k++)
			{
				if(j==stop[k])
				{
					f=true;
					break;
				}
			}
			if(f)
			{
				continue;
			}
			for(int k=1;k<=s;k++)
			{
				add(j,stop[k]);
				ind[stop[k]]++;
			}
		}
	}
	queue<int> q;
	for(int i=1;i<=n;i++)
	{
		if(ind[i]==0)
		{
			q.push(i);
			lev[i]=1;
		}
	}
	while(!q.empty())
	{
		int u=q.front();
		q.pop();
		ans=max(ans,lev[u]);
		for(int i=h[u];i;i=nxt[i])
		{
			int v=to[i];
			lev[v]=max(lev[v],lev[u]+1);
			if(!--ind[v])
			{
				q.push(v);
			}
		}
	}
	printf("%d\n",ans);
	return 0;
}
2021/8/4 08:38
加载中...