• 1506 传话


    1506 传话

     

    时间限制: 1 s
    空间限制: 128000 KB
    题目等级 : 白银 Silver
     
     
     
     
    题目描述 Description

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

    如果a认识bb不一定认识a

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

    输入描述 Input Description

    第一行是nm,表示人数和认识关系数。

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

    输出描述 Output Description

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

     

    样例输入 Sample Input

    4 6

    1 2

    2 3

    4 1

    3 1

    1 3

    2 3

    样例输出 Sample Output

    T

    T

    T

    F

    数据范围及提示 Data Size & Hint

    n<=1000

    1<=a, b<=n

    传递闭包100

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 int can[1001][1001];
     5 int main()
     6 {
     7     int n,m;
     8     scanf("%d%d",&n,&m);
     9     for(int i=1;i<=m;i++)
    10     {
    11         int x,y;
    12         scanf("%d%d",&x,&y);
    13         can[x][y]=1;
    14     }
    15     for(int i=1;i<=n;i++)
    16     {
    17         for(int j=1;j<=n;j++)
    18         {
    19             if(can[j][i]==1)
    20             {
    21                 for(int k=1;k<=n;k++)
    22                 {
    23                     if(can[i][k]==1)
    24                     {
    25                         can[j][k]=1;
    26                     }
    27                 }
    28             }
    29         }
    30             
    31     }
    32     for(int i=1;i<=n;i++)
    33     {
    34         if(can[i][i]==1)
    35             printf("T
    ");
    36         else
    37             printf("F
    ");
    38     }
    39         
    40     return 0;
    41 }
    View Code

    暴力40

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    
    struct node
    {
        int vis[1001];
        int rs[1001];
        int sl;//数量 
    }a[1001];
    int bz;
    int dfs(int now,int i,int flag)// now正在查找 i需要找 flag是否是第一次 
    {
        for(int j=0;j<=a[now].sl-1;j++)
        {
            if(a[now].rs[j]==i&&flag!=0)
            {
                bz=1;
                return 1;
            }
            else
            {
                if(a[a[now].rs[j]].vis[j]==0)
                {
                    a[a[now].rs[j]].vis[j]=1;
                    dfs(a[now].rs[j],i,1);
                    a[a[now].rs[j]].vis[j]=0;
                    if(bz==1)
                    {
                        return 1;
                    }
                    
                }
                
            }
                
        }
    }
    int main()
    {
        int n,m;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=m;i++)
        {
            int x,y;
            scanf("%d%d",&x,&y);
            a[x].rs[a[x].sl]=y;
            a[x].sl++;
        }
        for(int i=1;i<=n;i++)
        {
            //printf("%d",dfs(i,i,0));
            bz=0;
            if(dfs(i,i,0)==1)
                printf("T
    ");
            else
                printf("F
    ");
        }
        return 0;
    }
    View Code

    =.=

  • 相关阅读:
    分块查找
    vue笔记2022年7月29日21:38:22
    python 高级用法 错误、调试和测试
    python 中级用法
    python 面向对象
    换源笔记
    java Boolean 型不可直接判断
    java 下载或预览文件
    Cipher 使用 RSA非对称加密算法 公钥加密后,只有私钥才可以解密,私钥加密后,只有公钥才可以解密 java具体使用 非对称加密算法 总结心得
    java sprootboot 配置启动时记录进程号
  • 原文地址:https://www.cnblogs.com/zwfymqz/p/6669180.html
Copyright © 2020-2023  润新知