题目描述

有 nn 个同学(编号为 11 到 nn )正在玩一个信息传递的游戏。在游戏里每人都有一个固定的信息传递对象,其中,编号为 ii 的同学的信息传递对象是编号为 T_iTi​ 的同学。

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

输入格式

共22行。

第11行包含1个正整数 nn ,表示 nn 个人。

第22行包含 nn 个用空格隔开的正整数 T_1,T_2,\cdots\cdots,T_nT1​,T2​,⋯⋯,Tn​ ,其中第 ii 个整数 T_iTi​ 表示编号为 ii 的同学的信息传递对象是编号为 T_iTi​ 的同学, T_i \leq nTi​≤n 且 T_i \neq iTi​≠i 。

输出格式

11个整数,表示游戏一共可以进行多少轮。

输入输出样例

输入 #1复制

5
2 4 2 3 1

输出 #1复制

3

说明/提示

样例1解释

游戏的流程如图所示。当进行完第33 轮游戏后, 44号玩家会听到 22 号玩家告诉他自己的生日,所以答案为 33。当然,第 33 轮游戏后,22号玩家、 33 号玩家都能从自己的消息来源得知自己的生日,同样符合游戏结束的条件。

对于 30\%30%的数据, n ≤ 200n≤200;

对于 60\%60%的数据, n ≤ 2500n≤2500;

对于100\%100%的数据, n ≤ 200000n≤200000。

题解:找个环qwq具体我是看洛谷题解的%%%所以把题解搬运来咯!!

我们在连接一个点到另一个点之前,先用并查集判断是否构成一个环,如果是的话,我们就可以记录下这个答案,然后维护最小的答案。

那么,如果构成一个环的话,怎么记录它的长度呢?

我们可以先定义一个变量cnt,在并查集获取祖先的函数中使cnt的值加1,最后函数结束时就能得到这个环的长度了qwq!

同时,如果构成了一个环,就不需要把这个环的结尾接上,否则会陷入死循环!!

最后附上短短的代码:

// luogu-judger-enable-o2
#include<iostream>
#include<algorithm>
#include<queue>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<cstdio>
using namespace std;
const int N=200002;
const int oo=0x3f3f3f3f;
int n,fa[N],ans=oo;
int find(int x,int &yc) {yc++;if(fa[x]!=x) return find(fa[x],yc);else return x;
}
int main(){scanf("%d",&n);for(int i=1;i<=n;i++)fa[i]=i;int yc,biu;for(int i=1;i<=n;i++) {yc=0; scanf("%d",&biu);if(find(biu,yc)==i)ans=min(ans,yc);else fa[i]=biu;}printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/wuhu-JJJ/p/11318579.html

【洛谷 2661】信息传递相关推荐

  1. 洛谷2661 信息传递 三倍经验?

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

  2. 2019年东莞特长生 游戏(洛谷 P2661 信息传递)

    Description 某校科技节到了,有? 个同学(编号为1到?)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为? 的同学的信息传递对象是编号为??的同学. 游戏开始 ...

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

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

  4. 2018.11.02 洛谷P2661 信息传递(拓扑排序+搜索)

    传送门 按照题意模拟就行了. 先拓扑排序去掉不在环上面的点. 剩下的都是简单环了. 于是都dfsdfsdfs一遍求出最短的环就行. 代码: #include<bits/stdc++.h> ...

  5. 洛谷P2512 糖果传递

    环形均分纸牌 普通的均分纸牌前缀和的总和就是答案. 但是这里是环形的,要断开的位置需要最佳,我们把每个数减去sum/n,这样总的前缀和就为0了,若在第k个数之后把环断开,环形前缀和可以统一写成s[i] ...

  6. 洛谷or牛客数据结构+算法

    栈思想:先进后出 tips:栈里能放下标就放下标 (牛客)小c的计事本(直接用stack可以简化代码,且不会被自己绕晕,当时没意识到) (牛客)吐泡泡(没意识到用栈),(牛客)好串 1.后缀表达式(栈 ...

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

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

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

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

  9. HOJ 系统常用功能介绍 部署快速入门 c++ python java编程语言在线自动评测 信息奥赛一本通 USACO GESP 洛谷 蓝桥 CSP NOIP题库

    技术支持微 makytony 服务器配置需求 腾讯云 2H4G 5M 60GB 轻量应用服务器  承载大约 200~400人使用,经过压力测试,评测并发速度可满足130人左右的在线比赛. 系统镜像选 ...

最新文章

  1. 实战:使用 Python 用不到 10 行代码计算汽车数量
  2. 10、mybatis参数处理
  3. javaweb-服务器输出字符数据到浏览器
  4. Zabbix4.0 for PostgreSQL (上篇):基础环境的搭建部署
  5. C++:undefined reference to vtable 原因与解决办法 [转]
  6. 编写高质量代码:改善Java的151个建议四(基本类型)21-30
  7. 交换机的基本原理配置(一)
  8. keil5的基本使用
  9. JavaScript学习手册一:JS简介
  10. wgs84转cgcs2000 java_CGCS2000坐标系与WGS84的相互投影转换
  11. CSS 3 动画 实现图片动态切换
  12. 为什么要画ER图?有哪些画图规范?
  13. DCA1000 Training Video(DCA1000培训视频)
  14. latex 单元格 斜杠_如何在Excel中的单元格中启用键入斜杠
  15. 平面几何----用余弦定理证明海伦公式
  16. NSString NSArray NSDictionary NSSet 中的部分方法
  17. wxPython PyQT
  18. waitpid() 做人要厚道
  19. 用计算机弹欢乐斗地主,欢乐斗地主免费版电脑版
  20. 马斯克76岁父亲与继女生子,华强北又出一个芯片IPO,原蚂蚁副总投身AI制药,今日更多大新闻在此...

热门文章

  1. 安装Ubunutu音频视频库
  2. wampserver 虚拟主机
  3. SqlBulkCopy 批量复制数据到数据表
  4. 【转】Linux/ubuntu下apache+svn安装配置
  5. 如何阅读3,500万个博客?
  6. CVE-2019-0708 BlueKeep的扫描和打补丁
  7. 配合OAuth2进行单设备登录拦截
  8. JDK1.8使用Dubbo时需注意
  9. C语言中的常用文件操作
  10. Eclipse中的codetemplates.xml