记录编号 133322 评测结果 AAAAAAAAAA
题目名称 [金陵中学2007] 传话 最终得分 100
用户昵称 Gravatar水中音 是否通过 通过
代码语言 C++ 运行时间 0.030 s
提交时间 2014-10-27 19:45:31 内存使用 7.96 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
bool flag[1001]={0},flag2[1001]={0},flag3[1001]={0};
int n,m,i,j,zj1,zj2,to[1001][1001]={0},reto[1001][1001]={0},z[1001]={0};
void init()
{
	scanf("%d%d",&n,&m);
	for(i=1;i<=m;i++)
	{
		scanf("%d%d",&zj1,&zj2);
		to[zj1][0]++;
		to[zj1][ to[zj1][0] ]=zj2;
		reto[zj2][0]++;
		reto[zj2][ reto[zj2][0] ]=zj1;
	}
}
void firstdfs(int x)
{
	for(int h=1;h<=to[x][0];h++)
	if(!flag[ to[x][h] ])
	{
		flag[ to[x][h] ]=true;
		firstdfs(to[x][h]);
	}
	z[0]++;
	z[z[0]]=x;
}
void seconddfs(int x)
{
	for(int h=1;h<=reto[x][0];h++)
	if(flag[ reto[x][h] ]&&!flag2[ reto[x][h] ])
	{
		flag2[ reto[x][h] ]=true;
		seconddfs(reto[x][h]);
	}
	zj1++;
}
int main()
{
	freopen("messagez.in","r",stdin);
	freopen("messagez.out","w",stdout);
	init();
	for(i=1;i<=n;i++)
	if(!flag[i])
	{
		flag[i]=true;
		z[0]=0;
		firstdfs(i);
		j=z[0];
		while(1)
		{
			while(j>0&&flag2[ z[j] ])j--;
			if(j==0)break;
			flag2[ z[j] ]=true;
			zj1=0;
			seconddfs(z[j]);
			if(zj1==1) flag3[ z[j] ]=true;
		}
	}
	for(i=1;i<=n;i++)
	if(flag3[i])printf("F\n");
	else printf("T\n");
	return 0;
}