比赛 |
2019级快乐小组模拟赛19.9.19 |
评测结果 |
AAAAAAAAAA |
题目名称 |
消息传递 |
最终得分 |
100 |
用户昵称 |
梦那边的美好ET |
运行时间 |
0.178 s |
代码语言 |
C++ |
内存使用 |
21.77 MiB |
提交时间 |
2019-09-19 12:34:23 |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
char chin[5000000],*pin=chin;
int n,m,len,cnt,top,g[100001],sta[100001],dfn[100001],low[100001],to[200001],next[200001];
bool ok[100001],vis[100001],ins[100001];
void in(int &x){
x=0;
while(*pin<48) pin++;
while(*pin>47) x=x*10+*pin++-48;
}
void tarjan(int x){
vis[x]=ins[x]=1,dfn[x]=low[x]=++cnt,sta[++top]=x;
for(int t,i=g[x];i;i=next[i]){
if(!vis[t=to[i]]){
tarjan(t);
if(low[t]<low[x]) low[x]=low[t];
}
else if(ins[t]&&low[t]<low[x]) low[x]=low[t];
}
if(low[x]!=dfn[x]) return;
if(sta[top]==x) {top--,ins[x]=0;return;}
for(int i=0;i!=x;)
i=sta[top--],ok[i]=1,ins[i]=0;
}
int main(){
freopen("messagew.in","r",stdin);
freopen("messagew.out","w",stdout);
fread(pin,1,5000000,stdin);
int i,j;
in(n),in(m);
while(m--) in(i),in(j),to[++len]=j,next[len]=g[i],g[i]=len;
for(i=1;i<=n;i++) if(!vis[i]) tarjan(i);
for(i=1;i<=n;putchar('\n'),i++)
if(ok[i]) putchar('T');
else putchar('F');
return 0;
}