记录编号 533096 评测结果 AAAAAAAAAAA
题目名称 [HAOI 2006]受欢迎的牛 最终得分 100
用户昵称 Gravatar瑆の時間~無盡輪迴·林蔭 是否通过 通过
代码语言 C++ 运行时间 0.059 s
提交时间 2019-06-14 23:21:55 内存使用 14.32 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
int dfn[10001],low[10001],head[10001],Next[50001],to[50001];
int n,num,cnts,qlt,m,a1,a2;
int ls[10001],Size[10001],vls[10001];
int stack[10001];
bool into[10001];
void Tarjan(int u)
{
	stack[++cnts]=u;
	dfn[u]=low[u]=++num;
	into[u]=1;
	for(int i=head[u];i;i=Next[i])
	{
		int v=to[i];
		if(!dfn[v])
		{
			Tarjan(v);
			low[u]=min(low[u],low[v]);
		}
		else
		{
			if(into[v])
			{
				low[u]=min(low[u],dfn[v]);
			}
		}
	}
	if(low[u]==dfn[u])
	{
		qlt++;
		while(stack[cnts]!=u)
		{
			ls[stack[cnts]]=qlt;
			into[stack[cnts]]=0;
			Size[qlt]++;
			cnts--;
		}
		ls[stack[cnts]]=qlt;
		Size[qlt]++;
		into[stack[cnts]]=0;
		cnts--;
	}
	return ;
}
void add(int a,int b)
{
	to[++num]=b;
	Next[num]=head[a];
	head[a]=num;
}
int main()
{
	freopen ("cow.in", "r", stdin);
	freopen ("cow.out", "w", stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d",&a1,&a2);
		add(a1,a2);
	}
	for(int i=1;i<=n;i++)
	{
		if(!dfn[i])
		{
			Tarjan(i);
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=head[i];j;j=Next[j])
		{
			int v=to[j];
			if(ls[v]!=ls[i])
			{
				vls[ls[i]]++;
			}
		}
	}
	int pd=0;
	int sed;
	for(int i=1;i<=qlt;i++)
	{
		if(vls[i]==0)
		{
			pd++;
			sed=Size[i];
		}
	}
	if(pd==1)
	cout<<sed;
	else
	cout<<0;
	return 0;
}