招财猫正在玩一个游戏,他向他的所有联系人发一条短信“这里是来自xxx的问候。”,收到这条短信的人会将其原封不动地转发给自己通讯录里的所有人。
如果招财猫最后也收到自己这条短信,那么招财猫会很开心
现在给你N个人和他们各自的通讯录都有谁,问如果编号为i的人玩这个游戏,他最后会收到源自自己的短信么?(1<=i<=N)
通讯录是单向的。(招财猫的通讯录里有你,但你的通讯录里不一定有招财猫)
3 3 1 2 2 3 3 1
T T T
#include <cstdio> #include <iostream> #include <cstring> using namespace std; typedef long long ll; int flag[1005]; int vis[1005][1005]; int maze[1005][1005]; int N,M; void dfs(int s,int to,int goal) { if(s==goal) { flag[goal]=1; return ; } int t=0; for(t=1;t<=N;t++) { if(maze[s][t]==1) if(vis[s][t]==0) { vis[s][t]=1; dfs(t,0,goal); vis[s][t]=0; } } } int main(void) { cin>>N>>M; memset(flag,0,sizeof flag); for(int i=0;i<M;i++) { ll a,b; cin>>a>>b; maze[a][b]=1; } for(int i=1;i<=N;i++) for(int a=1;a<=N;a++) { if( maze[i][a]==1 ) dfs(a,0,i); } for(int i=1;i<=N;i++) { if(flag[i]) cout<<"T"<<endl; else cout<<"F"<<endl; } }