zoukankan      html  css  js  c++  java
  • 信息传递(tarjan)

    信息传递

    http://uoj.ac/problem/146

    有 n 个同学(编号为 1 到n )正在玩一个信息传递的游戏。在游戏里每人都有一个固定的信息传递对象,其中,编号为 i的同学的信息传递对象是编号为 Ti 的同学。

    游戏开始时,每人都只知道自己的生日。之后每一轮中,所有人会同时将自己当前所知的生日信息告诉各自的信息传递对象(注意:可能有人可以从若干人那里获取信息, 但是每人只会把信息告诉一个人,即自己的信息传递对象)。当有人从别人口中得知自 己的生日时,游戏结束。请问该游戏一共可以进行几轮?

    输入格式

    输入共2行。 第1行包含1个正整数 n ,表示 n 个人。

    第2行包含 n 个用空格隔开的正整数 T1,T2,,Tn其中第 i 个整数 Ti 表示编号为 i 的同学的信息传递对象是编号为 Ti 的同学, Tin 且 Ti≠i 。

    数据保证游戏一定会结束。

    输出格式

    输出共1行,包含1个整数,表示游戏一共可以进行多少轮。

    样例一

    input

    5
    2 4 2 3 1
    
    

    output

    3
    

    tarjan模板题

     1 #include<iostream>
     2 #include<cstring>
     3 #include<string>
     4 #include<cmath>
     5 #include<cstdio>
     6 #include<algorithm>
     7 #include<queue>
     8 #include<vector>
     9 #include<stack>
    10 #include<set>
    11 using namespace std;
    12 const int maxn=2e5+5;
    13 vector<int>ve[maxn];
    14 int n,dfn[maxn],low[maxn],vis[maxn],tot,ans=maxn;
    15 stack<int>st;
    16 void tarjan(int x){
    17     low[x]=dfn[x]=++tot;
    18     st.push(x);
    19     vis[x]=1;
    20     for(int i=0;i<ve[x].size();i++){
    21         int v=ve[x][i];
    22         if(!dfn[v]){
    23             tarjan(v);
    24             low[x]=min(low[x],low[v]);
    25         }
    26         else if(vis[v]){
    27             low[x]=min(low[x],dfn[v]);
    28         }
    29     }
    30     if(low[x]==dfn[x]){
    31         int cnt=0;
    32         while(1){
    33             int now=st.top();
    34             st.pop();
    35             vis[x]=0;
    36             cnt++;
    37             if(now==x) break;
    38         }
    39         if(cnt>1) ans=min(ans,cnt);
    40     }
    41 }
    42 
    43 
    44 int main(){
    45     scanf("%d",&n);
    46     int x;
    47     for(int i=1;i<=n;i++){
    48         scanf("%d",&x);
    49         ve[i].push_back(x);
    50     }
    51     for(int i=1;i<=n;i++){
    52         if(!dfn[i]){
    53             tarjan(i);
    54         }
    55     }
    56     printf("%d
    ",ans);
    57 }
    View Code
  • 相关阅读:
    Java面试题总结之JDBC 和Hibernate
    Java面试题总结之数据库与SQL语句
    Java面试题总结之OOA/D,UML,和XML
    Java面试题总结之数据结构、算法和计算机基础(刘小牛和丝音的爱情故事1)...
    文件路径的引用问题(配置文件路径vue.config.js)
    vue-cli2引入Bootstrap和jQuery
    ES6常用语法总结
    vue-cli4引入jquery和bootstrap
    vue-router的两种模式(hash和history)及区别
    本地存储localStorage的用法总结
  • 原文地址:https://www.cnblogs.com/Fighting-sh/p/9989624.html
Copyright © 2011-2022 走看看