比赛 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;
}