记录编号 36396 评测结果 AAAAAAAAAA
题目名称 [金陵中学2007] 传话 最终得分 100
用户昵称 GravatarYeehok 是否通过 通过
代码语言 C++ 运行时间 0.500 s
提交时间 2012-03-13 13:11:56 内存使用 38.49 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<string>
#define MaxInt 100001
using namespace std;
int n,m;
int queue[10001]={0};
int l,r,num;
int list[1001][10001]={0};
bool flag[1001]={0};
void queuempty()
{
	memset(flag,0,sizeof(flag));
	l=0;
	num=0;
	r=-1;
}
void queuein(int x)
{
	r=(r+1)%MaxInt;
	queue[r]=x;
	num++;
}
int queueout()
{
	num--;
	int tmp=l;
	l=(l+1)%MaxInt;
	return (queue[tmp]);
}
bool BFS(int point)
{
	int tmp;
	queuempty();
	queuein(point);
	while(num>0)
	{
		tmp=queueout();
		for(int i=1;i<=list[tmp][0];i++)
		{
			if(!flag[list[tmp][i]])
			{
				if(list[tmp][i]==point)
					return (true);
				queuein(list[tmp][i]);
				flag[list[tmp][i]]=true;
			}
		}
	}
	return false;
}
int main()
{
	freopen("messagez.in","r",stdin);
	freopen("messagez.out","w",stdout);
	int i,a,b;
	scanf("%d %d\n",&n,&m);
	memset(list,0,sizeof(list));
	for(i=0;i<m;i++)
	{
		scanf("%d %d\n",&a,&b);
		list[a][++list[a][0]]=b;
	}
	for(i=1;i<=n;i++)
	{
		if(BFS(i))
		{
			printf("T\n");
			continue;
		}
		printf("F\n");
	}
	fclose(stdin);
	fclose(stdout);
	return (0);
}