信息传递【NOIP2015】【强连通分量 Tarjan】

2023-11-02

题目链接


题目描述

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

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

输入描述:

 

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

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

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

输出描述:

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

  因为,每个回合大家都会告诉下一个人信息,那么只要构成环的时候就是结束游戏了,所以直接去找最小环的边数即可。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
#define INF 0x3f3f3f3f
#define HalF (l + r)>>1
#define lsn rt<<1
#define rsn rt<<1|1
#define Lson lsn, l, mid
#define Rson rsn, mid+1, r
#define QL Lson, ql, qr
#define QR Rson, ql, qr
#define myself rt, l, r
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const int maxN = 2e5 + 7;
int N, to[maxN];
int dfn[maxN], low[maxN], tot, Belong[maxN], Bcnt, Stop, Stap[maxN], siz[maxN];
bool instack[maxN];
void Tarjan(int u)
{
    dfn[u] = low[u] = ++tot;
    instack[u] = true;
    Stap[++Stop] = u;
    int v = to[u];
    if(!dfn[v])
    {
        Tarjan(v);
        low[u] = min(low[u], low[v]);
    }
    else if(instack[v] && dfn[v] < low[u]) low[u] = dfn[v];
    if(dfn[u] == low[u])
    {
        Bcnt++;
        do
        {
            v = Stap[Stop--];
            Belong[v] = Bcnt;
            instack[v] = false;
            siz[Bcnt]++;
        }while(u != v);
    }
}
int main()
{
    scanf("%d", &N);
    for(int i=1; i<=N; i++) scanf("%d", &to[i]);
    for(int i=1; i<=N; i++) if(!dfn[i]) Tarjan(i);
    int ans = INF;
    for(int i=1; i<=Bcnt; i++)
    {
        if(siz[i] > 1)
        {
            ans = min(ans, siz[i]);
        }
    }
    printf("%d\n", ans);
    return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

信息传递【NOIP2015】【强连通分量 Tarjan】 的相关文章

  • AcWing 1055. 股票买卖 II

    输入样例1 6 7 1 5 3 6 4 输出样例1 7 输入样例2 5 1 2 3 4 5 输出样例2 4 输入样例3 5 7 6 4 3 1 输出样例3 0 样例解释 样例1 在第 2 天 股票价格 1 的时候买入 在第 3 天 股票价格
  • UVA-1601 万圣节后的早晨 题解答案代码 算法竞赛入门经典第二版

    GitHub jzplp aoapc UVA Answer 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 以三个点的当前位置作为状态 广度优先遍历 找到终点即为最短次数 注意 一次可以移动多个点 但是每个点只能移动一步 在同一次中 B可
  • hdu 2586 How far away ?

    Problem acm hdu edu cn showproblem php pid 2586 Meaning 给一棵 n 个点的树 和 n 1 条边的边权 多次询问树上两点的距离 Analysis 以任意顶点为根 DFS 预处理出所有结点
  • 数据结构——普里姆(Prim)算法

    普里姆算法 Prim算法 图论中的一种算法 可在加权连通图里搜索最小生成树 意即由此算法搜索到的边子集所构成的树中 不但包括了连通图里的所有顶点 且其所有边的权值之和亦为最小 以下是数据结构中关于普里姆算法的操作 编程风格参考严蔚敏版数据结
  • 数据结构 图的应用

    文章目录 生成树 定义 性质 带权图的最小生成树 最小生成树的生成规则 最小生成树 Kruskal算法 步骤 最小生成树 Prim算法 步骤 最短路径 非负权值的单源最短路径 Dijkstra算法 目的 算法 存储空间 算法步骤 算法实现
  • P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib【普及】

    USACO1 5 特殊的质数肋骨 Superprime Rib 题目描述 农民约翰的母牛总是产生最好的肋骨 你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们 农民约翰确定他卖给买方的是真正的质数肋骨 是因为从右边开始切下肋骨 每次
  • 图论17(Leetcode864.获取所有钥匙的最短路径)

    用二进制表示获得的钥匙 假设n 钥匙个数 000000000代表没有钥匙 0000000001代表有idx为1的钥匙 0000000011代表有idx 1 2的钥匙 这方法巧妙又复杂 代码 class Solution static int
  • Financial Crisis【点双连通分量】

    题目链接 HDU 3749 你以为学了Tarjan会写几个边双就真的理解什么是双连通分量了吗 我原来真的不懂什么叫做点双BCC 不过这都没有关系 解决了这个问题之后 我终于知道了什么叫做点双连通分量了 这是一个绝对绝对经典的问题 首先讲一下
  • 树形dp(例题)

    树的最长路径带权值 树的直径可能时红色的边 从上图可以看出 每次要两个变量存放以u为根 最长路径d1 和次长路径d2 那么整个树的最长路径就有可能是d1 d2 我们每次要返回以u为根的贯穿试的最长路径 给他的父节点判断使用如下图 inclu
  • The Stable Marriage Problem 【HDU - 1914】【稳定婚姻匹配问题】

    题目链接 Problem Description The stable marriage problem consists of matching members of two different sets according to the
  • 1600*D. Road Map(数学

    解析 记录每个点的父节点和子节点 从新的根节点开始遍历 遍历所有的非父结点即可 include
  • [UVA1364

    评测地址 网址1 网址2 题目描述 题意 给出n位骑士 然后有m个关系 每个关系以格式 a b a b a b给出 表达骑士 a a
  • 《算法图解》读书笔记(二)

    第六章 图 广度优先搜索 1 解决最短路径问题 shortest path problem 的算法被称为广度优先搜索 breadth first search 2 图由节点 node 和边 edge 组成 一个节点可能与众多节点直接相连 这
  • Fix a Tree【Codeforces 699 D】【dfs + 树的性质】

    Codeforces Round 363 Div 2 D 题意 有N个点 每个点i都有一个父节点p i 如果 i p i 则是说明i结点是根结点 现在我们给出这样的1 N的p i 这可能是不合法的 问 我们应该最少改变多少个使它变成一棵合法
  • 1345:香甜的黄油(Dijkstra)---信息学奥赛一本通

    题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法 糖 把糖放在一片牧场上 他知道N 1 N 500 只奶牛会过来舔它 这样就能做出能卖好价钱的超甜黄油 当然 他将付出额外的费用在奶牛上 农夫John很狡猾 像以前的巴甫洛夫 他知道
  • 1600*B. pSort(并查集)

    解析 并查集 将能够交换的位置相连 查看对应的位置能够交换 include
  • BFS遍历树和DFS遍历树

    遍历树 按照遍历的顺序 如不清楚图的遍历 请先阅读图的遍历 绘制成树型结构 DFS遍历树 以下为图到遍历树的转化 如果不清楚图的遍历 请先阅读笔者的另一篇文章 图的遍历 动图 按照DFS遍历的顺序 绘制成一棵树 途中红色的边就是遍历过程中没
  • 第14届蓝桥杯C++B组省赛

    文章目录 A 日期统计 B 01 串的熵 C 冶炼金属 D 飞机降落 E 接龙数列 F 岛屿个数 G 子串简写 H 整数删除 I 景区导游 J 砍树 今年比去年难好多 Update 2023 4 10 反转了 炼金二分没写错 可以AC了 U
  • 数据结构——广度优先遍历(BFS)无向连通图

    以下是数据结构中关于广度优先遍历无向连通图的操作 编程风格参考严蔚敏版数据结构 其实深度优先遍历就是二叉树的层次遍历的推广 头文件及宏 include
  • 860.染色法判定二分图

    二分图是指一个图中的所有顶点可以分为两部分 并且每条边连接的是属于不同部分的两个顶点 include

随机推荐

  • Linux重启nfs出现没有权限,Linux NFS搭建与错误提示解决

    Linux NFS搭建与错误提示解决 服务端设置 root server cat etc redhat release 查看操作系统版本信息 CentOS release 5 5 Final root server uname r 查看当前
  • 常见的错误-04

    引言 在公司配置新电脑环境时候 在安装和配置完所有VSCode软件以及C 环境后 ubuntun环境下 尝试使用debug进行代码调试 遇到了在debug过程中不输出结果的bug 如下图 未输出array以及zheli 解决方法 在ubun
  • vue3+ts中对getCurrentInstance的使用

    1 在main js中挂载一个全局属性 拿axios举例 import App from App vue import axios from http 封装的axios方法 const app createApp App 创建应用 app
  • 【100%通过率 】【华为OD机试 c++/java/python】对称字符串【 2023 Q1 A卷

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 对称美学 对称就是最大的美学 现有一道关于对称字符串的美学 已知 第 1 个字符串 R 第 2 个字符串 BR 第 3 个字符串 RBBR 第
  • resetlog

    来自于itpub的一篇文章 http space itpub net 16628454 很多人说 resetlogs就是不完全恢复 这是不对的 做不完全恢复必须使用resetlogs 但resetlogs也可以做完全恢复 而noresetl
  • # 第四届蓝桥杯JavaB组省赛-马虎的算式

    第四届蓝桥杯JavaB组省赛 马虎的算式 题目描述 小明是个急性子 上小学的时候经常把老师写在黑板上的题目抄错了 有一次 老师出的题目是 36 x 495 他却给抄成了 396 x 45 但结果却很戏剧性 他的答案竟然是对的 因为 36 4
  • 解决idea文件properties中文乱码问题

    有时候将项目代码拉取至本地用idea打开时会出现中文乱码问题 遇到这种问题不要慌 重新设置一下编码为UTF 8即可 那么如何将idea的编码统一设置为UTF 8格式呢 接下来我们一一解决此类问题 1 打开idea编译器 有时候会看到打开的文
  • WebGIS工程师进阶训练营

    WebGIS工程师进阶训练营 1 WebGIS课程综述 2 多类情景部署SuperMap iServer 2 1 Linux环境部署SuperMap iServer 2 2 war包部署 2 3 常见问题排查 3 SuperMap iSer
  • word添加、更新目录

    1 显示导航窗口 视图 导航窗口 2 文档中的目录 2 1 插入目录 引用 目录 2 2 更新目录 方式一 点击下图 更新目录 方式二 引用 更新目录
  • WinForm使用鼠标裁剪图像

    之前做一个试卷识别的项目的时候需要预先将各个部分裁剪开然后进行识别 而网上的裁剪函数都是记录鼠标的位置然后进行裁剪 public static Bitmap PartDraw Image src Rectangle cutpart 切割图片
  • (休息几天)读米什金之货币银行学——货币与汇率

    1货币 当一国货币升值时 相对于其他货币价值上升 则该国商品在国外变得更贵 而外国商品唉本国则变得更便宜 相反 一国货币贬值 则该国商品在国外更便宜 而外国商品在本国则变得更贵 货币升值使得本国制造的商品在国外竞争力下降 而国外商品在本国竞
  • Koa2.js router 异步返回ctx.body失效的问题

    koa2 js 用router返回数据时 正常写法如下 我是将接口封装了 一个很普通的koa2 js get请求 router put getUserInfo ctx next gt const data ctx request body
  • PHP自己的框架2.0版本目录结构和命名空间自动加载类(重构篇一)

    目录 1 目录结构演示效果 2 搭建目录结构 以及入口public gt index php 3 引入core下面core gt base php 4 自动加载实现core gt fm gt autoload php 5 框架运行文件cor
  • Basic Level 1012 数字分类 (20分)

    题目 给定一系列正整数 请按要求对数字进行分类 并输出以下 5 个数字 A 1 A 1 A1 能被 5 整除的数字中所有偶数的和 A 2
  • matlab 取余(rem)和取模(mod)的区别

    取余 rem 和取模 mod 的区别 Matlab 生成机制 取余 采取fix 函数 向0方向取整 取模 采取floor 函数 向无穷小方向取整 当A B异号时 其实同号也是这个规律 取余 结果和A同号 取模 结果和B同号 PS 在js c
  • ASP .net core 整合 nacos 通过Spring Cloud Gateway 网关访问

    ASP net core 整合 nacos 通过Spring Cloud Gateway 网关访问 使用vs创建web项目 选择api 注意这里要取消掉Https配置否则使用网关转发也需要配置为https请求这里我们直接取消 添加nacos
  • WebRTC实现多人视频聊天

    写在前面 实现房间内人员的视频聊天 由于并未很完善 所以需要严格按照步骤来 当然基于此完善 就是时间的问题了 架构 整个设计架构如下 图片来自于参考博文 我使用的是第一种Mesh 架构 无需任何流媒体服务器 直接利用成熟的WebRTC 协议
  • windows10进程查询命令、端口占用查询命令、杀进程命令

    windows环境下编码开发经常遇到端口占用问题 解决时需要找到对应进程杀掉 释放占用 自己常用的几项操作命令如下 首先 打开Windows的命令窗口 键盘 win R 输入cmd 回车 1 查询端口被占用的进程 命令 netstat ao
  • 马虎的算式 有一次,老师出的题目是:36 x 495 = ?他却给抄成了:396 x 45 = ? 但结果却很戏剧性,他的答案竟然是对的!!

    马虎的算式 小明是个急性子 上小学的时候经常把老师写在黑板上的题目抄错了 有一次 老师出的题目是 36 x 495 他却给抄成了 396 x 45 但结果却很戏剧性 他的答案竟然是对的 因为 36 495 396 45 17820 类似这样
  • 信息传递【NOIP2015】【强连通分量 Tarjan】

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