记录编号 |
133322 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[金陵中学2007] 传话 |
最终得分 |
100 |
用户昵称 |
水中音 |
是否通过 |
通过 |
代码语言 |
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;
}