题解-Infinite Path
题解-Infinite Path
\(T\) 组测试数据。每次给你一个 \(n\) 的排列 \(\{p_n\}\),以及排列中第 \(i\) 个数的颜色 \(c_i\)。
令两个排列 \(A\) 和 \(B\) 的乘积 \(C=A\times B\) 满足 \(C_i=A_{B_i}\)。
对于排列 \(p\), \(p^k=\underbrace{p \times p \times \cdots \times p}_{k\ p}\)。
求最小的 \(k\),使 \(P=p^k\) 中存在 \(i\) 满足 \(c_i=c_{P_i}=c_{P_{P_i}}=\cdots\)。
数据范围:\(1\le T\le 10^4\),\(1\le n,\sum n\le 2\times 10^5\)。
可以把每个 \(p_i\) 看做一条 \(i\to p_i\) 的边。
因为 \(p\) 是个排列,所以会形成多个环,每个点每条边都在一个环上。
所以可以单独考虑每个环的最小 \(k\),然后答案取其最小值。
设当前环大小为 \(sz\):
\(k\) 每 \(+1\) 就使原来的边 \(i\to p^k_{i}\) 变成了 \(i\to p^{k+1}_{i}\)。
设 \(g=\gcd(k,sz)\),很明显 \(p^k\) 的图中每个环元素和 \(p^g\) 中的一样。
所以只需考虑 \(k\) 是 \(sz\) 的因数的情况:
每一整个大环会被分成 \(\frac{sz}{k}\) 个环,环上相邻元素在原环上距离为 \(k\)。
然后对 \(\frac{sz}{k}\) 个环判断是否颜色相等,如果有颜色相等的环,就说明对于该环该 \(k\) 是合法的。
然后枚举 \(k\),找到最小合法 \(k\) 即可。
时间复杂度 \(\Theta(n\sigma(n))\)(\(\sigma(n)\) 表示 \(n\) 的约数个数)。
蒟蒻讲不清楚,放个只有一个环情况的例图:

\(\texttt{vector}\) 代码实现:
#include <bits/stdc++.h>
using namespace std;
//&Start
#define re register
#define il inline
#define inf 0x3f3f3f3f
typedef long long lng;
//&Data
#define N 200000
bitset<N+5> vis;
//&Main
int main(){
re int t,n,ans;
scanf("%d",&t); //多组测试数据!
for(re int ti=1;ti<=t;ti++){
scanf("%d",&n);
vector<int> p(n+1),c(n+1);
for(re int i=1;i<=n;i++) scanf("%d",&p[i]);
for(re int i=1;i<=n;i++) scanf("%d",&c[i]);
vis.reset(),ans=inf;
for(re int i=1;i<=n;i++)if(!vis[i]){ //如果该点未出现于之前的环
vector<int> C,d; //C:该环上的点的颜色,d:sz的因素
for(re int j=i,f=1;f||j!=i;f=0,j=p[j]) C.push_back(c[j]),vis[j]=1;
re int sz=C.size(),K;
for(re int j=1;j<=sz;j++)if(sz%j==0) d.push_back(j);
for(re int k:d){
re int ok=0;
for(re int s=0;s<k;s++){
re int samc=1;
for(re int j=s;j<sz;j+=k)if(C[j]!=C[s]){samc=0;break;} //判断环上点颜色相等
if(samc){ok=1;break;}
}
if(ok){K=k;break;}
}
ans=min(ans,K); //取k最小值
}
printf("%d\n",ans);
}
return 0;
}
祝大家学习愉快!
题解-Infinite Path的更多相关文章
- CF1327D Infinite Path 题解
原题链接 太坑了我谔谔 简要题意: 求一个排列的多少次幂能达到另一个排列.排列的幂定义见题.(其实不是新定义的,本来就是这么乘的) 很显然,这不像快速幂那样可以结合律. 既然这样,就从图入手. 将 \ ...
- [LeetCode 题解]:Path Sum
前言 [LeetCode 题解]系列传送门: http://www.cnblogs.com/double-win/category/573499.html 1.题目描述 Given a bi ...
- PAT甲题题解-1053. Path of Equal Weight (30)-dfs
由于最后输出的路径排序是降序输出,相当于dfs的时候应该先遍历w最大的子节点. 链式前向星的遍历是从最后add的子节点开始,最后添加的应该是w最大的子节点, 因此建树的时候先对child按w从小到大排 ...
- LeetCode题解——Unique Path(DP与优化)
题目:A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). ...
- [译]学习IPython进行交互式计算和数据可视化(三)
第二章 在本章中,我们将详细学习IPython相对以Python控制台带来的多种改进.特别的,我们将会进行下面的几个任务: 从IPython中使用系统shell以在shell和Python之间进行强大 ...
- 算法与数据结构基础 - 二叉树(Binary Tree)
二叉树基础 满足这样性质的树称为二叉树:空树或节点最多有两个子树,称为左子树.右子树, 左右子树节点同样最多有两个子树. 二叉树是递归定义的,因而常用递归/DFS的思想处理二叉树相关问题,例如Leet ...
- 算法与数据结构基础 - 深度优先搜索(DFS)
DFS基础 深度优先搜索(Depth First Search)是一种搜索思路,相比广度优先搜索(BFS),DFS对每一个分枝路径深入到不能再深入为止,其应用于树/图的遍历.嵌套关系处理.回溯等,可以 ...
- 巧用 CSS 实现动态线条 Loading 动画
有群友问我,使用 CSS 如何实现如下 Loading 效果: 这是一个非常有意思的问题. 我们知道,使用 CSS,我们可以非常轻松的实现这样一个动画效果: <div></div&g ...
- Infinite Fraction Path HDU 6223 2017沈阳区域赛G题题解
题意:给你一个字符串s,找到满足条件(s[i]的下一个字符是s[(i*i+1)%n])的最大字典序的长度为n的串. 思路:类似后缀数组,每次倍增来对以i开头的字符串排序,复杂度O(nlogn).代码很 ...
随机推荐
- mysql数据库新增、修改、删除字段和修改表名
Mysql 删除,添加或修改表字段 删除 ALTER TABLE testalter_tbl DROP i; 新增 ALTER TABLE testalter_tbl ADD i INT; 指定位置新 ...
- Spring Cloud实战 | 最八篇:Spring Cloud +Spring Security OAuth2+ Axios前后端分离模式下无感刷新实现JWT续期
一. 前言 记得上一篇Spring Cloud的文章关于如何使JWT失效进行了理论结合代码实践的说明,想当然的以为那篇会是基于Spring Cloud统一认证架构系列的最终篇.但关于JWT另外还有一个 ...
- [head first 设计模式]第二章 观察者模式
[head first 设计模式]第二章 观察者模式 假如我们有一个开发需求--建造一个气象观测站展示系统.需求方给我们提供了一个WeatherObject对象,能够自动获得最新的测量数据.而我们要建 ...
- 用Python写一个病毒
WARNING 本文仅供学习和测试,请勿用于非法用途. 前言 花了挺长时间去开发的,中间有很多包是抄的,比如DDL注入.关于opencv等等,主要其实做了一些拼接.打包.部署. 写这篇博客并不真的想去 ...
- Vim注释行的方法
目录 一.Visual block 加注释 去注释 二.正则表达式 加注释 去注释 一.Visual block 加注释 1.首先按键盘上的ESC进入命令行模式 2.再按Ctrl+V进入VISUAL ...
- 网络拓扑实例之RRPP单环(五)
组网图形 RRPP简介 在城域网和企业网的网络规划以及实际组网应用中大多会采用环网结构来提高网络的可靠性.采用环网结构的好处是:当环上任意一个节点或节点之间的链路发生故障,都可以将数据流量切换到备份链 ...
- C语言讲义——库函数排序qsort
qsort函数在在stdlib.h中. 函数原型 void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void ...
- Spring bean注册
DefaultListableBeanFactory中: DefaultListableBeanFactory实现了BeanDefinitionRegistry,这个接口的实现完成BeanDefini ...
- JZOJ 11.28 提高B组反思
JZOJ 11.28 提高B组反思 被打崩了呀 下次打提高A去了(逃 T1 刚开始没有读懂题,后来读懂了以后没有思路.没有想到是一个构造题,对同构的性质没有了解清楚,题解也讲的不明不白,懵-- T2 ...
- 【GDOI2014模拟】JZOJ2020年8月14日提高组 服务器
[GDOI2014模拟]JZOJ2020年8月14日提高组 服务器 题目 Time and Memory Limits Description 我们需要将一个文件复制到n个服务器上,这些服务器的编号为 ...