noip201506 Message 信息传递

article/2025/7/6 6:12:11

试题描述:

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

输入:

共2行,第1行包含1个正整数 n ,表示 n 个人。
第2行包含 n 个用空格隔开的正整数T_1,T_2,...,T_n ,其中第 i 个整数 T_i 表示编号为 i 的同学的信息传递对象是编号为 T_i 的同学, T_i <= n 且 T_i 不等于 i 。
数据保证游戏一定会结束。

输出:

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

输入示例:

5
2 4 2 3 1

输出示例:

3

数据范围:

n<=200000

--------------------------------------------分隔线--------------------------------------------------------

这题看了题就知道其实我们所要干的一件事就是找最小环……(其实我考试的时候也知道是要最小环,可不知道怎么找啊……于是乎写了一个根本错的东西但不知道怎么回事还蒙了30分……学了一年C++,就差这么一道题的70,我的省一啊……)

上面的废话选择性忽略好了……下面来说这道题的重点……

找最小环的话果断要用到强连通分量。

强连通分量:对于一个有向图的顶点的子集S,如果在S内任取两个顶点u和v,都能找到一条从u到v的路径,那么就称S是强连通的。如果在强连通的顶点集合S中加入其他任意顶点集合后,它都不再是强连通的,那么就称S是原图的一个强连通分量(SCC :Strongly Connected Component)

强连通分量的分解可以用两次简单的dfs来实现。

第一次dfs的时候,选取任意顶点作为起点,遍历所有未访问过的顶点,在回溯前给定点标号。对剩余未访问过的顶点不断重复上述过程。

完成标号后越接近图的尾部,定点的标号越小。

第二次dfs时先将所有的边反向,然后以标号最大的顶点为起点进行dfs,这样可以把图的拓扑序储存。

代码如下:

 1 #include<iostream>
 2 #include<cctype>
 3 using namespace std;
 4 const int MAXN=200000+10;
 5 void read(int &x){
 6     x=0;int f=1;char ch=getchar();
 7     for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-1;
 8     for(;isdigit(ch);ch=getchar())x=x*10+ch-'0';
 9     x*=f;
10 }
11 //----------------------
12 int v[MAXN],first[MAXN],next[MAXN],e;
13 void AddEdge(int a,int b){
14     v[++e]=b;
15     next[e]=first[a];
16     first[a]=e;
17 }
18 
19 int vr[MAXN],firstr[MAXN],nextr[MAXN],er;
20 void AddEdger(int a,int b){
21     vr[++er]=b;
22     nextr[er]=firstr[a];
23     firstr[a]=er;
24 }
25 //----------------------
26 int n,tot,vs[MAXN],topo[MAXN];
27 bool vis[MAXN];
28 void dfs(int x){
29     vis[x]=1;
30     for(int i=first[x];i;i=next[i])
31         if(!vis[v[i]])dfs(v[i]);
32     vs[++tot]=x;
33 }
34 
35 void dfsr(int x,int k){
36     vis[x]=1;
37     topo[x]=k;
38     for(int i=firstr[x];i;i=nextr[i])
39         if(!vis[vr[i]])dfsr(vr[i],k);
40 }
41 //---------------------------
42 int cnt[MAXN];
43 int main(){
44     read(n);
45     for(int i=1;i<=n;i++){
46         int tmp;
47         read(tmp);
48         AddEdge(i,tmp);
49         AddEdger(tmp,i);
50     }
51 
52     memset(vis,0,sizeof(vis));
53     for(int i=1;i<=n;i++)
54         if(!vis[i])dfs(i);
55 
56     int k=1;
57     memset(vis,0,sizeof(vis));
58     for(int i=n;i>=1;i--)
59         if(!vis[vs[i]])dfsr(vs[i],k++);
60 
61     for(int i=1;i<=n;i++)cnt[topo[i]]++;
62     int ans=-1u>>1;
63     for(int i=1;i<=topo[vs[1]];i++){
64         if(cnt[i]!=1)ans=min(ans,cnt[i]);
65     }
66     printf("%d\n",ans);
67 }
View Code

 

转载于:https://www.cnblogs.com/543Studio/p/5178403.html


http://chatgpt.dhexx.cn/article/KNHAGQbP.shtml

相关文章

Codevs 4511 信息传递

题目描述 Description 有个同学&#xff08;编号为 1 到&#xff09;正在玩一个信息传递的游戏。在游戏里每人都有一个固定的信息传递对象&#xff0c;其中&#xff0c;编号为的同学的信息传递对象是编号为的同学。游戏开始时&#xff0c;每人都只知道自己的生日。之后每一轮中…

消息的传递

我们的郭嘉大大在曹操这过得逍遥自在&#xff0c;但是有一天曹操给了他一个任务&#xff0c;在建邺城内有 N 个袁绍的奸细&#xff0c;将他们从 1 到 N 进行编号&#xff0c;同时他们之间存在一种传递关系&#xff0c;即若C{i,j}1&#xff0c;则奸细 i 能将消息直接传递给奸细 …

简单知识——跨页面信息传递

背景 一个简单的数据查询功能&#xff0c;列表页面有“查看详情”按钮&#xff0c;跳转详情页面时列表的一条记录信息需要传递到详情页面&#xff1b;而详情页面有“返回”按钮&#xff0c;返回的同时也需要将原列表的查询条件回显。 跳转方式直接是 window.location.href&am…

信息传递的多样化的挑战

信息传递的障碍&#xff0c;是造成竞争被动的重要原因。因此&#xff0c;要使有用的信息得以正确传递&#xff0c;必须克服这种传递障碍。 方法之一是减少组织机构层次和信息传递的环节&#xff0c;尽量做到信息的直接贯通。 方法之二是采取双向传递方式。传统的传递往往是高一…

java实现信息传递

在过去&#xff0c;我们无数次实现了代码的本机运行&#xff0c;一行行的代码在我们的屏幕上飞舞&#xff0c;最终形成种种不同的结果&#xff0c;但是&#xff0c;这些都止于自己的计算机上&#xff0c;在这个万物互联的世界里&#xff0c;通信&#xff0c;是不可缺少的一环&a…

【PyG入门学习】三:信息传递机制

1.理论基础 将普通的卷积过程推广到非规则数据领域一般是通过邻域聚合或者信息传递机制。 x i ( k − 1 ) ∈ R F x^{(k-1)}_i∈R^F xi(k−1)​∈RF表示在第k-1层节点i的节点特征&#xff0c; e j , i ∈ R D e_{j,i}∈R^D ej,i​∈RD表示从节点j到节点i的边的特征&#xff08…

[易飞]录入信息传递设置信息

通常我们在查询相关单据单身中会有附带上一个单别的关联单据&#xff0c;比如采购发票单身有进货单单别、单号。系统默认做了超连接。 可有些时候我想查看这个品号信息的参数呢&#xff1f;是否可以自定义呢&#xff1f; 今天是礼拜一&#xff0c;打开某聊天群&#xff1a;就显…

100种思维模型之信息传递思维模型-028

人与人之间存有 认知偏差和理解偏差 &#xff0c;信息在传递过程中会 衰减、失真以及再加工 &#xff01; 信息传递思维模型 &#xff0c;一个有助于 提高信息传递质量 的思维模型。下面从三个方面进行介绍&#xff0c; 何谓信息传递思维模型、信息传递思模型生活中的运…

沟通管理--关于信息的有效传递和维护

沟通管理作为项目管理核心知识领域之一&#xff0c;在项目管理和团队协作中的作用毋庸置疑。沟通管理涉及的范围很广&#xff0c;本文从沟通的重要性和模型出发&#xff0c;主要从信息传递和信息维护这两个方面对沟通管理进行阐述。 一. 关于沟通 下面这张图描绘了西方文化中…

HC官方资料介绍

中国区市场招商联系方式&#xff1a;13867974424

HC-SR04驱动记录

文章目录 1、工作原理2、读取数据方式3、驱动记录 1、工作原理 常用的HC-SR04模块如下所示&#xff1a; 引脚说明&#xff1a; 引脚说明VCC电源&#xff0c;常用5vTrig控制端Echo接收端GND地 使用说明&#xff1a; 控制端发送一个10us的高电平脉冲&#xff0c;之后再接收口…

【STM32篇】驱动HC_SR04超声波测距模块

CH_SR04 一、简介 1.产品特点 HC_SR04超声波测距模块可提供2cm-400cm的非接触式测距感测功能&#xff0c;测距精度高达3mm&#xff1b;模块包括超声波发射器&#xff0c;接收器与控制电路。 基本工作原理&#xff1a; &#xff08;1&#xff09;采用IO口TRIG触发测距&#xff0…

HC-05蓝牙模块配置

目录 1、连接蓝牙模块a.蓝牙模块通过USB转TTL连接电脑b.打开串口助手&#xff0c;波特率设置为38400c.检验是否连接成功 2、配置波特率3、修改密码4、设置主从模式5、设置蓝牙连接模式6、查询自身地址7、添加配对蓝牙地址8、测试 1、连接蓝牙模块 a.蓝牙模块通过USB转TTL连接电…

HC-06蓝牙模块使用方法

接线方式&#xff1a; 配套资料&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1_8-d1LoHuhpIBC9Ygu4aJQ 参考&#xff1a; (1272条消息) HC-05/06蓝牙模块的原理及使用方法_hc-05蓝牙模块原理图_小小少年123的博客-CSDN博客 注意&#xff1a;蓝牙灯闪烁分析 如果…

初次使用HC-08蓝牙模块01

基础连接 1.接线 2.测试&#xff0c;手机APP和测试架&#xff0c;成功互发AT指令即成功 3.完整教学 测试结果 起初手机APP搜索不到蓝牙&#xff0c;以测试架为主&#xff0c;另一个为从&#xff0c;从上面的蓝灯不亮&#xff0c; 后面重新恢复出厂设置&#xff08;在串口…

HC-05的基本使用(STM32)

目录 一、HC-05 1、HC-05简介 2、接线方式 二、AT指令 1.基本指令 2、基本的使用 3、手机连接HC-05 三、CubuMX配置&#xff08;基于stm32f407zgt6&#xff09; 总结 一、HC-05 1、HC-05简介 HC-05 蓝牙串口通信模块&#xff0c;是基于 Bluetooth Specification V2.0 带 EDR 蓝…

智慧小区 HC 系统安装配置简单流程(V2022-09-28)

首先感谢官方 HC 开发&#xff08;一纸荒年&#xff09;的指导 ------------- 我的系统为&#xff1a; conetos 8.2(官方建议 7.6 版本较稳定) 登陆空间系统打开 SSH 终端# 第一步骤 1&#xff1a;先安装梓豪平台 1.1:梓豪平台安装是非常简单的&#xff0c;我们可以通过以…

Media Player Classic - HC 源代码分析 1:整体结构

Media Player Classic - HC 源代码分析系列文章列表&#xff1a; Media Player Classic - HC 源代码分析 1&#xff1a;整体结构 Media Player Classic - HC 源代码分析 2&#xff1a;核心类 &#xff08;CMainFrame&#xff09;&#xff08;1&#xff09; Media Player Cla…

HC-08蓝牙模块与电脑进行蓝牙远程通信! 支持HC-02、HC-08、HC-42蓝牙

因项目接触HC-08蓝牙模块&#xff0c;一直想电脑与STM32上接的HC-08蓝牙模块进行远程通信&#xff01;在网上未能找到解决办法&#xff0c;此方式为广州汇承公司提供&#xff08;蓝牙生产厂家&#xff09;&#xff0c;亲测有效&#xff01; 一、适用型号及PC条件&#xff1a; 1…

蓝牙模块(HC-05/HC-06)详解

这里写目录标题 0. 蓝牙概述蓝牙技术的特点 1. 常见的蓝牙模块2. HC-05/HC-062.1 概念2.2 区别 3. STM32使用HC-05通信3.1 方法3.2 示例代码 0. 蓝牙概述 蓝牙&#xff08;Bluetooth&#xff09;是一种用于无线通信的技术标准&#xff0c;允许设备在短距离内进行数据交换和通信…