洛谷P5151 HKE与他的小朋友 快速幂/图论+倍增
正解:矩阵快速幂/tarjan+倍增
解题报告:
跟着神仙做神仙题系列III
这题首先一看到就会想到快速幂趴?就会jio得,哦也不是很难哦
然而,看下数据范围,,,1×105,,,显然开不下TT
所以考虑优化快速幂(或找环+倍增
两种方法都港下趴
先说图论好辣QwQ
大概是这样的:
首先我们把每个座位都抽象成一个点,由它给我的A[]可以知道坐在每个座位上的人会移到哪儿
我们就可以理解为连了一条边
显然的是我们可以换了很多次之后换回来,于是就成了一个环了
然后我们就求一波强连通分量,这样我们读入k之后就能先给他取个膜让k控制在一定范围内嘛
然后之后再用下倍增的思想,这个我jio得还是挺好懂的?就是f[i][j]表示i这个点移动2<<j之后会去哪儿
然后就好辣!
get?
快速幂其实也不难,尝试理解一下就能get
这个实在没什么好说的大概扯下趴,,,
这样的,显然它是满足结合律的,举个eg,假如我要挪21次
那我可以一次一次挪,但这显然比较慢,但我也可以这样子:21=24+22+21
所以就用和快速幂一样的思想,这么想吼,一样是有个tmp有个ans
首先20系数是0,所以ans不变,tmp变成A[tmp]
然后21系数是1,所以ans变成A[tmp],tmp变成A[tmp]
然后22系数是1,所以ans变成A[tmp],tmp变成A[tmp]
然后23系数是0,所以ans不变,tmp变成A[tmp]
然后24系数是1,所以ans变成A[tmp],tmp变成A[tmp]
这个我jio得还是可以理解的趴?挺显然的?
实在无法理解可以结合一下前面的倍增,其实这个和倍增是一样的不过倍增是预处理就成立逆推而这个是顺推而已(所以倍增会快一些,不过这个简单打一些啊QwQ
(话说这题我jio得就是单纯的快速幂啊,,,哪里是矩阵快速幂了,,,为什么我看到的两篇都是说是矩阵快速幂啊,,,没有get?
顺便一提,这题的法二有个很新颖的名词"群",似乎用那个更好解释
然而我还没学:D基础都没落实完的菜菜灵巧不配学新芝士呜呜呜
所以详见hl的博客
over!
然后两个方法的代码应该都会打的到时候都放上来QwQ
- #include<bits/stdc++.h>
- using namespace std;
- #define ll long long
- #define rg register
- #define rp(i,x,y) for(register ll i=x;i<=y;++i)
- const ll N=;
- ll n,k,a[N],nw[N],tmp[N];
- ll read()
- {
- rg char ch=getchar();rg ll x=;rg bool y=;
- while(ch!='-' && (ch>'' || ch<''))ch=getchar();
- if(ch=='-')ch=getchar(),y=;
- while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=getchar();
- return y?x:-x;
- }
- int main()
- {
- n=read();k=read();rp(i,,n)a[i]=read(),nw[i]=i,tmp[i]=i;
- while(k)
- {
- if(k&){rp(i,,n)tmp[i]=nw[a[i]];rp(i,,n)nw[i]=tmp[i];}
- rp(i,,n)tmp[i]=a[a[i]];rp(i,,n)a[i]=tmp[i];k>>=;
- }
- rp(i,,n)tmp[nw[i]]=i;
- rp(i,,n)printf("%lld ",tmp[i]);
- return ;
- }
这是法二滴代码QwQ
洛谷P5151 HKE与他的小朋友 快速幂/图论+倍增的更多相关文章
- 洛谷 P1045 【麦森数】快速幂
不用快速幂,压位出奇迹! 本人是个蒟蒻,不太熟悉快速幂,这里给大家介绍一种压位大法. 让我们来分析一下题目,第一位是送分的,有一个专门求位数的函数:n*log10(2)+1. 然后题目中p<=3 ...
- 洛谷P1357 花园(状态压缩 + 矩阵快速幂加速递推)
题目链接:传送门 题目: 题目描述 小L有一座环形花园,沿花园的顺时针方向,他把各个花圃编号为1~N(<=N<=^).他的环形花园每天都会换一个新花样,但他的花园都不外乎一个规则,任意相邻 ...
- 模板【洛谷P3390】 【模板】矩阵快速幂
P3390 [模板]矩阵快速幂 题目描述 给定n*n的矩阵A,求A^k 矩阵A的大小为n×m,B的大小为n×k,设C=A×B 则\(C_{i,j}=\sum\limits_{k=1}^{n}A_{i, ...
- 洛谷P1397 [NOI2013]矩阵游戏(十进制矩阵快速幂)
题意 题目链接 Sol 感觉做这题只要对矩阵乘法理解的稍微一点就能做出来对于每一行构造一个矩阵A = a 1 0 b列与列之间的矩阵为B = c 1 0 d最终答案为$A^{n - ...
- 洛谷 P6772 - [NOI2020]美食家(广义矩阵快速幂)
题面传送门 题意: 有一张 \(n\) 个点 \(m\) 条边的有向图,第 \(0\) 天的时候你在 \(1\) 号城市,第 \(T\) 天的时候你要回到 \(1\) 号城市. 每条边上的边权表示从城 ...
- 【题解】P5151 HKE与他的小朋友
[题解]P5151 HKE与他的小朋友 实际上,位置的关系可以看做一组递推式,\(f(a_i)=f(a_j),f(a_j)=f(a_t),etc...\)那么我们可以压进一个矩阵里面. 考虑到这个矩阵 ...
- 洛谷P2633 Count on a tree(主席树,倍增LCA)
洛谷题目传送门 题目大意 就是给你一棵树,每个点都有点权,每次任意询问两点间路径上点权第k小的值(强制在线). 思路分析 第k小......又是主席树了.但这次变成树了,无法直接维护前缀和. 又是树上 ...
- 洛谷P2633 Count on a tree(主席树,倍增LCA,树上差分)
洛谷题目传送门 题目大意 就是给你一棵树,每个点都有点权,每次任意询问两点间路径上点权第k小的值(强制在线). 思路分析 第k小......又是主席树了.但这次变成树了,无法直接维护前缀和. 又是树上 ...
- luogu P5151 HKE与他的小朋友
嘟嘟嘟 看到\(i\)变成了\(A_i\),我突然想起了置换这个东西.于是马上到网上学了一遍轮换乘法. 手模后发现轮换乘法满足结合律,但不满足交换律. 于是就可以快速幂啦. 需要注意的是每一次相乘是\ ...
随机推荐
- Linux基础知识之man手册的使用
在Linux中man的使用频率应该是很高的,灵活运用它可以让自己快速的掌握一个不熟悉命令的使用方法.下面来介绍下man 环境CentOS6.8 man - format and display the ...
- 根据多表条件更新表.............. 一条sql语句.............
CREATE TABLE a( NAME INT, age int ); CREATE TABLE b( height INT, weight int ); ,); ,); SELECT * FROM ...
- 获取用户真实的IP
在实际项目很使用的函数,果断收集了 function get_client_ip() { if (getenv("HTTP_CLIENT_IP") && str ...
- 用MathType怎么编辑带圈数字序号
在用MathType编辑公式时,涉及到的数学公式与符号这些都能编辑出来,只要你能够细心一点找到它们相应的模板,不管是在word公式编辑器MathType工具栏模板中,还是在插入符号之后的面板中都可以. ...
- Windows中目录及文件路径太长无法删除的解决方法
用windows自带的命令解决 win7以上的系统有 robocopy 命令 http://www.jianshu.com/p/95a269951a1b 导致目录太深的原因就是用node中的node ...
- partition的分配策略简单代码实现
先说说partition的好处:Partition的好处是可以并发的获取同类数据,提高效率. 第一步需要实现Partitioner对象. public class ProducerPartitione ...
- Nginx(二)-- 配置文件之虚拟主机配置
1.配置文件与解释 #user nobody; worker_processes 1; # 设置工作子进程,默认是1个工作子进程,可以修改,一般设置为CPU的总核数 #error_log logs/e ...
- IIS7以上版本去掉伪静态去掉index.php方法
1,由于从iis7以上的版本httpd.ini文件已不会被解析,将以下的xml文件复制到web.config 的文件中,然后放到网站的根目录即可. <?xml version="1.0 ...
- OpenGL超级宝典总结(二)2D/3D笛卡尔坐标、坐标裁剪、纹理坐标、MVP转换等概念
如果你想把图形渲染在正确的位置上,那么坐标的设置就很重要了.在OpenGL中,与坐标相关的主要有笛卡尔坐标.坐标裁剪.纹理坐标.MVP(Model View Projection)转换. 1.笛卡尔坐 ...
- Android 使用CheckBox实现多选效果
CheckBox:复选框1.有两种状态: 选中状态(true),未选中状态(false)2.属性: android:id="@+id/checkbox" android:layou ...