zoukankan      html  css  js  c++  java
  • 消息传递

    【问题描述】

    晚会正在进行一个传话游戏,如果A认识B,那么A收到某个消息,就会把这个消息传给B,以及所有A认识的人(A认识B,B不一定认识A),所有人从1到N编号。

    现在给出所有认识关系,如果A发布一条新消息,那么会不会经过若干次传话后,这个消息传回给了A(1 ≤ A ≤ N)。

    【输入描述】

    输入的第一行是两个数N和M,表示人数和认识关系数;

    接下来的M行,每行两个数A和B,表示A认识B。

    【输出描述】

    输出一共有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

    【数据范围及提示】

    对于30%的数据,N ≤ 1000,M ≤ 20000;

    对于50%的数据,N ≤ 10000,M ≤ 100000;

    对于100%的数据,N ≤ 100000,M ≤ 200000;

    认识关系可能会重复给出。

    源代码:
    
    #include<cstdio>
    #include<vector>
    #include<stack>
    using namespace std;
    int n,m,Ans(0),Num(0),Head[100001],Sum[100001],i[100001],j[100001];
    bool In[100001]={0};
    stack <int> H;
    vector <int> S[100001];
    void Tarjan(int t) //裸Tarjan。
    {
        j[t]=i[t]=++Num;
        In[t]=true;
        H.push(t);
        for (int a=0;a<S[t].size();a++) //注意vector[]从0开始存储。
        {
            int T=S[t][a]; //可以如此调用。
            if (!j[T])
            {
                Tarjan(T);
                i[t]=min(i[t],i[T]);
            }
            else
              if (In[T])
                i[t]=min(i[t],j[T]);
        }
        int k;
        if (i[t]==j[t])
        {
            Ans++; //环的数量。
            do
            {
                k=H.top();
                H.pop();
                Head[k]=Ans; //属于第几个环。
                Sum[Ans]++; //环中元素的数量。
                In[k]=false;
            }
            while (k!=t);
        }
    }
    int main() //此题为“传话”的加强版,更是能力提升版。
    {
        scanf("%d%d",&n,&m);
        for (int a=1;a<=m;a++)
        {
            int t1,t2;
            scanf("%d%d",&t1,&t2);
            S[t1].push_back(t2); //因为数据过于庞大,采用链表的形式存储。
        }
        for (int a=1;a<=n;a++)
          if (!j[a])
            Tarjan(a);
        for (int a=1;a<=n;a++)
          printf(Sum[Head[a]]>1?"T
    ":"F
    ");
        return 0;
    }
  • 相关阅读:
    React Native-安卓环境的搭建
    python爬虫学习之日志记录模块
    Python爬虫学习之正则表达式爬取个人博客
    eclipse运行spark程序时日志颜色为黑色的解决办法
    python爬虫学习之爬取全国各省市县级城市邮政编码
    python 字典详细使用
    python爬虫学习之查询IP地址对应的归属地
    python jieba库的基本使用
    Eclipse环境搭建并且运行wordcount程序
    Hadoop2.0伪分布式平台环境搭建
  • 原文地址:https://www.cnblogs.com/Ackermann/p/5838689.html
Copyright © 2011-2022 走看看