0pts 7WA 3TLE 本地样例能过,请大佬帮忙看看
查看原帖
0pts 7WA 3TLE 本地样例能过,请大佬帮忙看看
387236
杨誉yy楼主2020/12/18 13:05
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
queue <long long> ii;
int ans,n,i,j,t,head,m,s1,s2,k,tmp;
int num[2000],l[2000][2000],cnt[2000],up[2000],down[2000];
bool v[2000],vis[2000][2000];
int main()
{
	scanf("%d%d",&n,&m);
	for(i=1;i<=m;i++)
	{
		s1=0;
		s2=0;
		memset(v,false,sizeof(v));
		scanf("%d",&tmp);
		for(j=1;j<=tmp;j++)
		{
			scanf("%d",&t);
			up[++s1]=t;
			v[t]=true;
		}
		for(j=1;j<=n;j++)
		{
			if(!v[i])
			{
				down[++s2]=i;
			}
		}
		for(j=1;j<=s2;j++)
		{
			for(k=1;k<=s1;k++)
			{
				if(!vis[down[j]][up[k]])
				{
					l[down[j]][++cnt[down[j]]]=up[k];
					num[up[k]]++;
					vis[down[j]][up[k]]=vis[up[k]][down[j]]=true;
				}
			}
		}
	}
	for(i=1;i<=n;i++)
	{
		if(num[i]==0)
		{
			ii.push(i);
		}
	}
	while(n)
	{
		tmp=ii.size();
		for(i=1;i<=tmp;i++)
		{
			head=ii.front();
			ii.pop();
			for(j=1;j<=cnt[head];j++)
			{
				num[l[head][j]]--;
				if(num[l[head][j]]==0)
				{
					ii.push(l[head][j]);
				}
			}
			n--;
		}
		ans++;
	}
	printf("%d",ans);
}
2020/12/18 13:05
加载中...