zoukankan      html  css  js  c++  java
  • 传话

    【题目描述】

    一个朋友网络,如果a认识b,那么如果a第一次收到某个消息,那么会把这个消息传给b,以及所有a认识的人。如果a认识b,b不一定认识a。

    所有人从1到n编号,给出所有认识关系,问如果i发布一条新消息,那么会不会经过若干次传话后,这个消息传回给了i(1 <= i <= n)。

    【输入描述】

    第一行是n和m,表示人数和认识关系数;

    接下来的m行,每行两个数a和b,表示a认识b(1 <= a,b <= n)。认识关系可能会重复给出,但一行的两个数不会相同。

    【输出描述】

    一共n行,每行一个字符T或F。第i行如果是T,表示i发出一条新消息会传回给i,如果是F,表示i发出一条新消息不会传回给i。

    【样例输入】

    4 6

    1 2

    2 3

    4 1

    3 1

    1 3

    2 3

    【样例输出】

    T

    T

    T

    F

    【数据范围及提示】

    n<=1000。

    源代码:
    
    #include<cstdio>
    #include<cstring>
    int i[1001][10001];
    int n,m,T;
    bool Vis[1001],f[1001];
    void DFS(int t)
    {
        if (f[T]) //找到了就返回。
          return;
        Vis[t]=true;
        if (t==T) //重合即为环。
        {
            f[T]=true;
            return;
        }
        for (int a=1;a<=i[t][0];a++)
          if (!Vis[i[t][a]]) //未找过。
            DFS(i[t][a]);
    }
    int main() //普通DFS。
    {
        scanf("%d%d",&n,&m);
        for (int a=1;a<=m;a++)
        {
            int t1,t2;
            scanf("%d%d",&t1,&t2);
            i[t1][0]++; //节省空间,邻接点数量。
            i[t1][i[t1][0]]=t2;
        }
        for (T=1;T<=n;T++)
        {
            memset(Vis,false,sizeof(Vis));
            for (int a=1;a<=i[T][0];a++)
              DFS(i[T][a]); //DFS每条边。
        }
        for (int a=1;a<=n;a++)
          if (f[a])
            printf("T
    ");
          else
            printf("F
    ");
        return 0;
    }
  • 相关阅读:
    centos7 安装mysql
    ketlle windows下的安装(最基本)
    Spark参数详解 一(Spark1.6)
    SSM项目集成Lucene+IKAnalyzer在Junit单元测试中执行异常
    解决jquery.pjax加载后的异常滚动
    码云项目克隆至github
    JFinal获取多个model
    避免layui form表单重复触发submit绑定事件
    解决pjax重复绑定
    jfinal 拦截器中判断是否为pjax请求
  • 原文地址:https://www.cnblogs.com/Ackermann/p/5402203.html
Copyright © 2011-2022 走看看