CF542C 解题分析
1 题目大意
1.1 题目翻译:
给定一个值域为 \([1,n]\) 的函数 \(f(x)\),让你求出最小的 \(k\),其中 \(k\) 满足 \(f^{(2k)}(x) = f^{(k)}(x)\)。
其实我觉得这题你谷翻译十分到位,建议没读懂题的还是去看你谷翻译罢。
1.2 数据范围:
对于 \(100\%\) 的数据:
- \(1 \leq n \leq 200\)
1.3 *关于数据范围
这个 \(n\) 其实可以开到 \(2 \times 10^5\) 的,但前提是你得加一个高精度。出题人好仁慈,拜谢出题人。
2 解法分析
发现出现了 \(f^{k}(x)\) 这种东西,不难想到建图。
我们可以把 \(x\) 向 \(a_x\) 连一条有向边。不难发现,整个图被分成了多个连通块,每一个连通块都形似基环树。我们可以把每一个环的大小和一个点到环的最短距离算出来。
现在,我们分两种情况讨论。设答案为 \(k\):
如果结点 \(u\) 在环中,设这个环大小为 \(s\),那么这个结点必须绕至少 \(s\) 次才能出现相等。所以,\(s \ | \ k\)。
如果结点 \(u\) 不在环上,设这个结点到环的最短距离为 \(d\),那么这个结点只有走至少 \(d\) 次才能到环。所以,\(k \geq d\)。
于是,答案就简单了。我们把所有环的大小取最小公倍数 \(\operatorname{lcm}\),然后算出第二种结点 \(d\) 的最大值 \(p\)。如果 \(p \leq \operatorname{lcm}\),那么就成立;否则,还要用带余除法计算出最小的 \(w\),满足 \(w \cdot \operatorname{lcm} >= p\)。此时,\(w \cdot \operatorname{lcm}\) 即为答案。
3 AC Code
代码丑的要死,将就着看吧。
int dfs(int x) {
if (vis[x])
return dis[x];
vis[x] = 1;
dfn[x] = ++ timetmp;
int num = dfs(a[x]);
if (vis[a[x]] == 1)
p = a[x], num = dfn[x] - dfn[p] + 1;
else if (cycle[a[x]] == 1) dis[x] = 1;
else dis[x] = num + 1;
if (p > 0 && vis[p] == 1)
cycle[x] = 1, dis[x] = num;
vis[x] = 2;
return dis[x];
}
void solve() {
cin >> n;
f (i, 1, n)
scanf("%lld", &a[i]);
int k = 1;
f (i, 1, n)
if (!vis[i]) {
p = -1;
dfs(i);
}
f (i, 1, n)
if (cycle[i])
k = k * dis[i] / __gcd(k, dis[i]);
int x = 0;
f (i, 1, n)
if (!cycle[i])
x = max(x, dis[i]);
if (x > k)
k = ((x - 1) / k + 1) * k;
printf("%lld\n", k);
}
CF542C 解题分析的更多相关文章
- [rctf](web)rcdn 解题分析,知识点总结
比赛平台关闭了,没有截图,见谅. 解题思路流程: 分析网站结构,看源码,元素审计.发现以下信息. 要得到flag要获得一个pro cdn pro 子域名长度为3到6个字符 存在一个提交ticke页 ...
- codeforces 723E (欧拉回路)
Problem One-Way Reform 题目大意 给一张n个点,m条边的无向图,要求给每条边定一个方向,使得最多的点入度等于出度,要求输出方案. 解题分析 最多点的数量就是入度为偶数的点. 将入 ...
- codeforces716E (点分治)
Problem Digit Tree 题目大意 给一棵树,有边权1~9. 询问有多少个点对(i,j),将i--j路径上的数字依次连接后所形成新数字可以被k整除.gcd(K,10)=1 解题分析 点分治 ...
- poj1741 (点分治)
Problem Tree 题目大意 给一棵树,有边权.求树上距离小于等于K的点对有多少. 解题分析 点分治.对每一棵子树进行dfs,求出每棵子树的重心,继而转化为子问题. 对于经过根的路径i--j,令 ...
- HDU 5884 (贪心)
problem sort 题目大意 有n个数组,每个数组有a[i]个元素,每次可以将至多k个数组合并为一个数组,所花费代价为这些数组的元素和.给定代价上限,求将所有数组合并为1个数组的最小k. 解题分 ...
- codeforces 341d (树状数组)
problem Iahub and Xors 题目大意 一个n*n的矩阵,要求支持两种操作. 操作1:将一个子矩阵的所有值异或某个数. 操作2:询问某个子矩阵的所以值的异或和. 解题分析 由于异或的特 ...
- HDU 5869 (离线+树状数组)
Problem Different GCD Subarray Query 题目大意 给定n个数的序列,有q个询问,每次询问一个区间中所有子区间所形成不同的gcd的数量. 解题分析 由于固定一个数为右端 ...
- HDU5840 (分块+树链剖分)
Problem This world need more Zhu 题目大意 给一颗n个点的有点权的树,有m个询问,对于每个询问u,v,k,首先将点u到点v的最短路径上的所有点按顺序编号,u的编号为1, ...
- HDU 5398 (动态树)
Problem GCD Tree 题目大意 n个点的无向完全图,标号1~n,每条边u-->v 的权值为gcd(u,v),求其最大生成树,输出最大边权和. n<=10^5,有多个询问. 解题 ...
- BZOJ3669 (动态树)
Problem 魔法森林 (NOI2014) 题目大意 给n个点,m条边的无向图,每条边有两个权值a,b. 求一条从1-->n的路径,使得这条路径上max(a)+max(b)最小.输出最小值即可 ...
随机推荐
- Grid 布局-子项补充及常用布局
上篇我们介绍了 Grid 布局容器项的内容, 看上去属性很多, 其实并没有, 记住关键的概念和简写就行啦. 因为是二维的, 这个属性的数量就比 flex 要多很多哦, 但其实真正也没有常用那没多啦. ...
- Mysql 实现 rank 和 != 问题
我一直相信, 人是能预测未来的, 这应该是前几年看弗洛伊德, 荣格的一些心理学书, 给我的一些感受, 有个片段是关于做梦的, 一个人梦见子弹穿过他自己的头颅, 结果不久, 他就去世了. 这个片段当时给 ...
- 0.4元/TB/月!天翼云HBlock打响软件定义存储价格战
惊爆价打响存储战争 当企业数据量以平均每年增加50%的速度狂飙,存储成本已成重负:传统方案动辄数百万的成本投入.动辄数周的部署周期.动辄30%的闲置资源浪费-- 今天,天翼云HBlock以" ...
- CentOS Stream 10安装部署Zabbix 7.0网络监控平台和设备配置添加
以下是在CentOS Stream 10上部署Zabbix 7.0监控平台,并配置多种监控目标的完整操作指南: 一.Zabbix 7.0 基础环境部署 1. 系统准备 # 更新系统 sudo dnf ...
- 实际工作中 Git Commit 代码提交规范是什么样的?
前言 Git 是我们日常工作中使用最为广泛的分布式版本代码控制系统,因此在我们的实际工作中,git commit 代码提交规范能够让每一次代码提交都变得有据可循,方便后续的代码审查.问题追踪和版本管理 ...
- C# Environment.CurrentDirectory和AppDomain.CurrentDomain.BaseDirectory的区别
Environment.CurrentDirectory 和 AppDomain.CurrentDomain.BaseDirectory 都是C#中用于获取当前应用程序的目录路径的方法,但是它们的用途 ...
- 深入浅出了解生成模型-2:VAE模型原理以及代码实战
From: https://www.big-yellow-j.top/posts/2025/05/11/VAE.html 前文已经介绍了GAN的基本原理以及代码操作,本文主要介绍VAE其基本原理以及代 ...
- JVM知识总结-01
1 程序计数器 程序计数寄存器(Program Counter Register),是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器.在虚拟机的概念模型里,字节码解释器工作时就是 ...
- .NET 10 进展之 CoreCLR Interpreter
我们从前一阵子 Maui 几个被离职的Mono 工具链相关的微软员工来说起,通过现象看本质,这意味着.NET 10 将完成对Mono的完全替代..NET 10 特性中有一个 @dotnet/runti ...
- FastAPI安全门神:OAuth2PasswordBearer的奇妙冒险
title: FastAPI安全门神:OAuth2PasswordBearer的奇妙冒险 date: 2025/05/30 18:34:14 updated: 2025/05/30 18:34:14 ...