Codevs1506

来源:互联网 发布:手机屏幕养兔子软件 编辑:程序博客网 时间:2024/06/09 14:05

判断一个点是否在环上,暴力深搜,知道重复为止

#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b) for(int i=a;i>=b;i--)using namespace std;const int N=1e4+10;int n,m,len=0,last[N],vis[N],jud[N];struct Edge{int to,next;Edge(int to=0,int next=0):to(to),next(next){}}e[N<<1],E[N<<1];void add_edge(int u,int v){e[++len]=Edge(v,last[u]);last[u]=len;}void dfs(int x,int org){    if(jud[org])return ;    vis[x]=1;    if(x==org) {jud[org]=1;return ;}    for(int i=last[x];i;i=e[i].next) {        if(!vis[e[i].to])dfs(e[i].to,org);    }}int main(){    scanf("%d%d",&n,&m);    for(int a,b,i=1;i<=m;i++) {        scanf("%d%d",&a,&b);        add_edge(a,b);    }    for(int i=1;i<=n;i++) {        memset(vis,0,sizeof(vis));        for(int j=last[i];j;j=e[j].next)            dfs(e[j].to,i);     }    for(int i=1;i<=n;i++) jud[i]==1?printf("T\n"):printf("F\n");    return 0;}