地址 https://www.acwing.com/problem/content/description/519/

有 n 个同学(编号为 1 到 n)正在玩一个信息传递的游戏。

在游戏里每人都有一个固定的信息传递对象,其中,编号为 i 的同学的信息传递对象是编号为 TiTi 的同学。 

游戏开始时,每人都只知道自己的生日。

之后每一轮中,所有人会同时将自己当前所知的生日信息告诉各自的信息传递对象(注意:可能有人可以从若干人那里获取信息,但是每人只会把信息告诉一个人,即自己的信息传递对象)。

当有人从别人口中得知自己的生日时,游戏结束。

请问该游戏一共可以进行几轮?

输入格式
输入共  行。  第  行包含  个正整数 n ,表示 n 个人。  第  行包含 n 个用空格隔开的正整数T1,T2,…,Tn,其中第 i 个整数 Ti 表示编号为 i 的同学的信息传递对象是编号为 Ti 的同学,Ti ≤n 且 Ti ≠i。  数据保证游戏一定会结束。 输出格式
输出共  行,包含  个整数,表示游戏一共可以进行多少轮。 数据范围
n≤
输入样例: 输出样例:

解法

每个人看做点 通讯的途径看做边的话 这里就是求最短的环。

应该可以使用搜索的方式获取最短的环

我们这里没使用这种方式 而是使用tarjan求环

 #include <iostream>
#include <vector>
#include <stack>
#include <algorithm> using namespace std; const int maxn = 2e5 + ;
vector<int> E[maxn];
int vis[maxn];
int dfn[maxn], low[maxn], tot, n, ans = maxn;
stack<int> s; void tarjan(int x)
{
low[x] = dfn[x] = ++ tot;
s.push(x); vis[x] = ; for (int i = ; i < E[x].size(); i++) {
int v = E[x][i];
if (!dfn[v]) {
tarjan(v);
low[x] = min(low[x], low[v]);
}
else if (vis[v]) {
low[x] = min(low[x], dfn[v]);
}
} if (low[x] == dfn[x]) {
int cnt = ;
while () {
int now = s.top();
s.pop();
vis[x] = ;
cnt++;
if (now == x) break;
}
if (cnt > ) ans = min(ans, cnt);
} } int main()
{
scanf("%d",&n );
for (int i = ; i <= n; i++) {
int x;
scanf("%d", &x);
E[i].push_back(x);
} for (int i = ; i <= n; i++) {
if (!dfn[i])
tarjan(i);
} cout << ans << endl; return ;
}

tarjan

还可以考虑使用并查集的办法 找到最小的并查集即可

 #include <iostream>

 using namespace std;

 const int N = +;
int fa[N],n,m,i,j,k,cnt,ans = 1e9; int find(int x)
{
cnt++;
return fa[x]==x?x:find(fa[x]);
} int main(){
cin >> n;
for(int i = ;i <= n;i++)
fa[i] = i;
for(int i = ;i <= n;i++){
int x;
cin >> x;
cnt = ;
if(find(x) == i)
ans = min(ans,cnt);
else
fa[i] = x;
} cout << ans;
return ;
}

acwing 517. 信息传递的更多相关文章

  1. tg2015 信息传递 (洛谷p2661)

    题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...

  2. [NOIP2015]信息传递

    [NOIP2015]信息传递[问题描述]有

  3. [NOIP2015] 提高组 洛谷P2661 信息传递

    题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...

  4. 使用postMesssage()实现跨域iframe页面间的信息传递----转载

    由于web同源策略的限制,当页面使用跨域iframe链接时,主页面与子页面是无法交互的,这对页面间的信息传递造成了不小的麻烦,经过一系列的尝试,最后我发现有以下方法可以实现: 1. 子页面url传参 ...

  5. 洛谷 P2661 信息传递 Label:并查集||强联通分量

    题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...

  6. NOIP 2015 信息传递

    kawayi 题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的 ...

  7. AC日记——信息传递 洛谷 P2661 (tarjan求环)

    题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...

  8. 2015 NOIP day2 t2 信息传递 tarjan

    信息传递 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.luogu.org/problem/show?pid=2661 Descrip ...

  9. 【 NOIP2015 DAY1 T2 信息传递】带权并查集

    题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...

随机推荐

  1. 自己总结numpy用法

    最近用numpy比较多,边用边自己总结用法. 1. 数组 1.1 生成 m行 * n列 的随机数组 import numpy as np # 生成 m行*n列 的随机数组 # np.random.ra ...

  2. IP地址的格式和分类

    IP地址 IP地址时IP协议提供的一种地址格式,它为互联网上的网络设备分配一个用来通信的逻辑地址,目前分为IP v4和IP v6两种,v4的意思是version4,v6是同样的意思. IP v4 IP ...

  3. vue中使用element组件时事件想要传递其他参数的问题

    在使用element的上传组件时在一下几个钩子中传递其他参数 图中是文件上传时的几个钩子,参数为文件或文件列表或者其他参数,但是现在我想在原有参数上传递其他参数.比如我想在on-success的钩子中 ...

  4. Dynamics CRM通过定制应用程序功能区为符合条件的实体表单增加按钮

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复167或者20151029可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 前面的博文都是为一个实体添加按钮 ...

  5. 从0使用Ruby on Rails打造企业级RESTful API项目实战之我的云音乐

    本节对我们项目实现的功能和知识点做一个简单的介绍,因为是RESTful API项目,所以对于后端来说基本上没有什么UI界面可展示,那我们就在关键的点,使用客户端(Android)实现的效果图. 课程简 ...

  6. python中json与pickle的简要说明

    import json    ======> 注意:不同语言之间通用但不能传输对象类型 该模块中最重要的方法: 1.json.dump(‘python数据’,‘json文件’)   # 将pyt ...

  7. R语言实战 第7章

    # 01 描述性统计分析 --------------------------------------------------------------#针对总体的mycavs = mtcars[,c( ...

  8. Java死锁演示

    Java死锁演示 在线程中嵌套获取锁导致死锁.思路,尽量不要嵌套获取锁. package com.mozq.demo.demo; public class DeadLockDemo { private ...

  9. R期望

    斐波那契数列--九九乘法表 # 1. 打印斐波那契数列 kl<-c(1,1) for (i in 1:8){ kl[i+2]<-kl[i]+kl[i+1] } kl # 10. 打印九九乘 ...

  10. 在CV尤其是CNN领域的一些想法

    现在的CNN还差很多,未来满是变数. 你看,现在的应用领域也无非merely就这么几类----分类识别,目标检测(定位+识别),对象分割......,但是人的视觉可不仅仅这么几个功能啊!是吧. 先说说 ...