洛谷 2661 信息传递(暴力、tarjan)

题解- [Noip2015] 信息传递 文章目录描述解析 描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏。在游戏里每人都有一个固定的信息传递对象,其中,编号 为i的同学的信息传递对象是编号为Ti同学。游戏开始时,每人都只知道自己的生日。之后每一轮中,所有人会同 时将自己当前所知的生日信息告诉各自的信息传递对象(注意:可能有人可以从若干人那里获取信息,但是每人只 会把信息告诉一个人,即自己的信息传递对象)。当有人从别人口中得知自己的生日时,游戏结束。请问该游戏一 共可以进行几轮? 简单的说就是给你一个有向图,让你找出一个最小的环来。 输入 阅读详情
题目描述

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

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

输入输出格式

输入格式:

输入共2行。

第1行包含1个正整数n表示n个人。

第2行包含n个用空格隔开的正整数T1,T2,……,Tn其中第i个整数Ti示编号为i

的同学的信息传递对象是编号为Ti的同学,Ti≤n且Ti≠i

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

输出格式:

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

输入输出样例

输入样例#1:

5
2 4 2 3 1

输出样例#1:

3

说明

样例1解释
这里写图片描述

游戏的流程如图所示。当进行完第 3 轮游戏后, 4 号玩家会听到 2 号玩家告诉他自

己的生日,所以答案为 3。当然,第 3 轮游戏后, 2 号玩家、 3 号玩家都能从自己的消息

来源得知自己的生日,同样符合游戏结束的条件。

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

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

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

1.暴力

从每个入度为0的点开始跑,找最小环,因为题目的特殊性(每个点只有一个出度),可以保证最多每个点都访问一遍。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;

int n,ans=1e9+7;
int rd[200010],used[200010],per[200010];
int To[200010];

void Done(int s)
{
    int k=s;
    used[s]=k;
    while(To[s])
    {
        if(!used[To[s]]) per[To[s]]=per[s]+1,used[To[s]]=k; 
        else
        {
            if(used[To[s]]==k) 
                ans=min(ans,per[s]-per[To[s]]+1);
            break;
        }
        s=To[s];
    }
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
    {
        scanf("%d",&To[i]);
        ++rd[To[i]]; 
    }
    for(int i=1;i<=n;++i)
       if(!rd[i])
          Done(i);
    printf("%d",ans);
    return 0;
}
2.修改的tarjan?

改了改tarjan。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;

int N,top,ans=1e9+7,cnt;
int Dfn[200010],Low[200010],To[200010];
int Stack[200010],Instack[200010],Done[200010];

void tarjan(int n)
{
    Dfn[n]=Low[n]=++cnt;
    Stack[++top]=n;
    Instack[n]=1;
    Done[n]=1;
    if(To[n])
    {
       if(!Dfn[To[n]]) 
       {
           tarjan(To[n]),
           Low[n]=min(Low[n],Low[To[n]]);
       }
       else  
            if(Instack[To[n]]) Low[n]=min(Low[n],Dfn[To[n]]);
    }
    if(Dfn[n]==Low[n])
    {
        int k=top,j;
        do
        {
           j=Stack[top];
           top--;
           Instack[j]=0;    
        }while(j!=n);
        if(k!=top+1) ans=min(ans,k-top);
    }
}
int main()
{
    scanf("%d",&N);
    for(int i=1;i<=N;++i)
      scanf("%d",&To[i]);
    for(int i=1;i<=N;++i)
    if(!Done[i])
       tarjan(i);
    printf("%d",ans);
    return 0;   
} 
//不会有大环套小环的情况,可以用tarjan求。 
NOIP2015初赛普及组C++试题及参考答案.pdf 立即下载

相关推荐

NOIP2015提高组初赛C++试题.pdf

NOIP2015提高组初赛C++试题

洛谷P2661 信息传递==coedevs4511 信息传递 NOIP2015 day1 T2

P2661 信息传递 题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏。在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学。 游戏开始时,每人都只知道自己的生日。之后每一轮中,所有人会同时将自己当前所知的生日信息告诉各自的信息传递对象(注意:可能有人可以从若干人那里获取信息,但是每人只会把信息告诉一个人,即...

weixin_33985679的博客 516

ECC密码的加密和解密(附带代码实现)

ECC,全称Elliptic Curve Cryptography,是椭圆曲线密码学。这是一种公钥加密技术,其安全性基于椭圆曲线离散对数问题,被广泛应用于信息安全领域。ECC的主要优势在于,相较于RSA和DSA等其他传统的公钥密码体系,它能够在提供相同安全级别的情况下,使用更短的密钥,从而减少计算量和存储空间的需求。例如,一个256位的ECC密钥提供的安全性可以与3072位的RSA密钥或DSA密钥相媲美。ECC的主要应用领域包括SSL安全证书、安全电子邮件、移动设备安全、物联网设备安全等。

xixixi7777的博客 8271

【洛谷】P2661 信息传递

之后每一轮中,所有人会同时将自己当前所知的生日信息告诉各自的信息传递对象(注意:可能有人可以从若干人那里获取信息, 但是每人只会把信息告诉一个人,即自己的信息传递对象)。本质上是要在一个无权有向图上求最短环,并且该图的每个顶点最多只有一个出度,可以用带权并查集来做。在游戏里每人都有一个固定的信息传递对象,其中,编号为。在并查集里的出边暂时还是指向自己的),所以,如果。的同学的信息传递对象是编号为。的同学的信息传递对象是编号为。的祖宗,并且设递归完成之后,指向的点的编号,遍历。的祖宗是谁,容易知道。...

数学、算法爱好者的博客 1189

贝塞尔曲线在机器人路径平滑中的实战应用与优化

本文深入探讨了贝塞尔曲线算法在机器人路径平滑中的核心应用。通过对比G1CBS与G2CBS两种方法,详细阐述了如何实现从切线连续到曲率连续的平滑优化,以满足不同机器人对运动平稳性和效率的需求,并提供了完整的Python代码实现与关键参数调优指南。

weixin_29051811的博客 307

基于CANoe的车载以太网测试

以太网测试 CANoe

Yafet 4552

蓝桥杯:消息传递

有n个同学( 编号为1到n)正在玩一个信息传递的游戏。 在游戏里每人都有一个固定的信息传递对象,其中,编号为n的同学的信息传递对象是编号为Ti的同学。游戏开始时,每人都只知道自己的生日。之后每一轮中,所有人会同时将自己当前所知的生日信息告诉各自的信息传递对象( 注意:可能有人可以从若干人那里获取信息,但是每人只会把信息告诉一个人,即自己的信息传递对象)。 当有人从别人口中得知自己的生日时, 游戏...

Dream' 748

AI嵌入式系统测试:从确定性验证到概率性评估的体系构建

软件测试是保障系统质量的关键环节,其核心在于验证功能是否符合预期。传统嵌入式测试聚焦于确定性逻辑,通过代码覆盖、边界值分析等方法确保时序、内存等指标的精确性。随着人工智能技术的普及,深度学习模型以其概率性输出和复杂非线性映射的特性,为嵌入式系统带来了新的能力,也彻底改变了测试的范式。AI模型的‘黑盒’特性使得测试目标从‘绝对正确’转向‘置信度满足’,并催生了准确率、F1分数等新指标。在工程实践中,这种融合要求测试体系必须扩展维度,将数据质量、模型量化损失、资源约束下的精度与性能权衡纳入核心考量。尤其在嵌入式

weixin_26766559的博客 382

洛谷 P2661 信息传递

洛谷 P2661 信息传递 Description 有 n 个同学(编号为 1 到 n )正在玩一个信息传递的游戏。在游戏里每人都有一个固定的信息传递对象,其中,编号为 i 的同学的信息传递对象是编号为 Ti的同学。 游戏开始时,每人都只知道自己的生日。之后每一轮中,所有人会同时将自己当前所知的生日信息告诉各自的信息传递对象(注意:可能有人可以从若干人那里获取信息, 但是每人只会把信息...

aochongbi5356的博客 268

ACC自适应巡航功能

自适应巡航功能(Adaptive Cruise Control)通过传感器检测车辆前方形式环境,控制自车行驶速度以达到定速巡航、跟车巡航、跟车启停,并支持超车辅助等功能。1. 定速巡航一般可设置车辆在30~150km/h的定速范围内巡航2. 跟车巡航车速0~150km/h范围内的跟车巡航3. 跟车启停30s内:自车随之起步,驾驶员无需操作30s~600s内:驾驶员按钮激活 或 轻踩加速踏板激活起步600s后:ACC退出激活状态进入待激活状态,电子驻车制动EPB会自动启动4. 超车辅助。

LXY_LXY_的博客 1384

图文详解Trae配置Java开发环境

本文介绍了Trae开发工具的安装配置流程:首先从官网下载安装Trae,然后安装Java开发所需的Extension Pack for Java和Spring Boot Extension Pack插件。关键步骤包括修改settings.json配置文件,需指定JDK路径、Maven可执行文件路径和用户设置文件路径。所有操作均配有图示说明,并强调要替换为实际电脑路径。

谷哥的小弟 5992

每日一题7.3

另外还有大佬写的并查集简化版(复制粘贴大佬的):不仅简化了,而且有更适配这个题的处理:更新b[i]的方式考虑了步数。后来看题解说因为出度都是1所以可以循环链。结果又因为我写的复杂度又太大了又tle。之后又在豆包帮助下用时间戳代替每次循环都要来一次的vis,如下。本来想当一个tarjan题写,但是感觉别的方法也很简单。先尝试了暴力set失败了,有两个tle。我会再更新这个题的其他解法的。

2302_80633434的博客 449

「PAT乙级真题解析」Basic Level 1034 有理数四则运算 (问题分析+完整步骤+伪代码描述+提交通过代码)

题设给定两个有理数, 要求输出这两个有理数的和、差、积、商。 如果只是这样, 则问题很简单, 但是题设要求输出的每个有理数必须是最简形式. **所以本题的一个重点是如何将有理数转为题设要求的有理数.**

过美好生活,做高效程序员 3129

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

题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏。在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学。 游戏开始时,每人都只知道自己的生日。之后每一轮中,所有人会同时将自己当前所知的生日信息告诉各自的信息传递对象(注意:可能有人可以从若干人那里获取信息,但是每人只会把信息告诉一个人,即自己的信息传递对象)。当有人从别人口中得知自己的...

dezhen7015的博客 147

Java语音革命:用代码打造永不疲倦的AI客服,让客户支持效率飙升300%!

客户支持领域常面临“薛定谔困境”,即无法预知客户来电的意图是投诉还是表扬。通过Java技术,尤其是语音识别和自然语言处理(NLP),可以有效解决这一问题。文章展示了如何利用Java代码构建“声纹量子引擎”,实现客户支持的自动化。核心技术包括录音与预处理、语音识别和语义理解。通过百度AI API和Stanford NLP,系统能够快速、准确地识别客户语音并理解其意图。数据表明,优化后的AI处理时间从15分钟缩短至18秒,语音识别准确率提升至98.5%,并发处理能力达到单实例1000+请求。这些技术显著提升了客

墨夶的博客 1034

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

水题——洛谷P2661 信息传递

https://www.luogu.org/problem/show?pid=2661 交了个暴力。。。过了; …………. 其实就是时间鹺; 非常简单;#include<map> #include<cmath> #include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> #include<algorithm>

我怎么这么菜的呢 666

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

洛谷P2661 信息传递

传送门 题目大意:每个人每一轮可以把消息传给另一个人,问几轮后某个人可以从人 听到自己的消息。 题解:tarjian缩点,求缩点后缩的点包含的最少的点个数。 代码: 正解 #include<iostream> #include<cstdio> #include<cstring> #define maxn 200009 using...

weixin_30621919的博客 74

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

信息传递 -并查集判最小环

题目描述 有 个同学(编号为 到 )正在玩一个信息传递的游戏。在游戏里每人都有一个固定的信息传递对象,其中,编号为 的同学的信息传递对象是编号为 的同学。游戏开始时,每人都只知道自己的生日。之后每一轮中,所有人会同时将自己当前所知的生日信息告诉各自的信息传递对象(注意:可能有人可以从若干人那里获取信息,但是每人只会把信息告诉一个人,即自己的信息传递对象)。当有人从别人口中得知自己的生日时,游...

lyslyslys的博客 334

【NOIP 2015】 D1 T2 信息传递

环 dfs

风凌残度的博客 1078

NOIP2015提高组.信息传递

使用强连通分量算法求环上点的数量, 对每个连通分量求最小点数。

Ayanami_Rei的博客 693

P2661 [NOIP2015 提高组] 信息传递 详解

本题解乃系洛谷 P2661 [NOIP2015 提高组] 信息传递题解详细说明以上就是今天要讲的内容,本博客介绍了一种博主认为比较简单的解法,如有不足之处烦请指点。

u010212352的博客 448

P2661 [NOIP2015 提高组] 信息传递

NOIP2015 提高组-信息传递(非图论做法) 学校模拟赛出了这道题,考场上只拿了20分,用dfs做的,据说正解是图论,但我就要用dfs写!!!。 思路: 如果用dfs写很简单,遍历每个点,从当前点开始搜,每到一个点就标记一下,走到重复的点就停止(找最小环长)。 70分CODE: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define ll lon

weixin_45540506的博客 363

【题解】NOIP 2015 信息传递(tarjan 强连通分量)

题目描述有 n 个同学(编号为 1 到 n )正在玩一个信息传递的游戏。在游戏里每人都有一个固定的信息传递对象,其中,编号为 i 的同学的信息传递对象是编号为 Ti 的同学。游戏开始时,每人都只知道自己的生日。之后每一轮中,所有人会同时将自己当前所知的生日信息告诉各自的信息传递对象(注意:可能有人可以从若干人那里获取信息, 但是每人只会把信息告诉一个人,即自己的信息传递对象)。当有人从别人口中得知自

水煮皮皮虾 732

【noip 2015】信息传递

题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏。在游戏里每人>都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是>编号为Ti同学。 游戏开始时,每人都只知道自己的生日。之后每一轮中,所有人会同时>将自己当前所知的生日信息告诉各自的信息传递对象(注意:可能有人>可以从若干人那里获取信息,但是每人只会把信息告诉一个人,即自己>的信息传递对象)。当有人从别人

Hellsegamosken 728

NOIP 2015 信息传递

洛谷 P2661 信息传递 https://www.luogu.org/problemnew/show/P2661 JDOJ 2996: [NOIP2015]信息传递 D1 T2 https://neooj.com:8082/oldoj/problem.php?id=2996 Description 有 n个同学(编号为1到 n)正在玩一个信息传递的游戏。在游戏...

anhaoti3785的博客 258
上一篇: <学习笔记>排序模板
下一篇: codevs 1046 旅行家的预算(贪心)
Loi_Mapleleaf
博客等级 码龄10年 17粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值