首页 > 其他分享 >关于此题[ABC367E] Permute K times倍增思想的一些总结

关于此题[ABC367E] Permute K times倍增思想的一些总结

时间:2025-01-10 22:23:08浏览次数:1  
标签:复杂度 ABC367E long times 步能 图上 此题 倍增 节点

传送门
第一次接触到倍增思想是用来求lca时,为了避免一层一层往上爬浪费时间复杂度。再后来就是区间DP中一小类问题或者是部分图上问题可以用倍增来优化。
那么这道题其实可以看作图上问题来使用倍增优化。看到这道题的数据范围,K达到了\(10^{18}\)量级,这让我们不得不思考log级别往下复杂度的算法,又由于,每一次操作都相当于从当前节点走到下一个节点,可以看作在图上,每个i到x[i]连一条有向边,求的就是从每一个节点出发走K步能走到的节点。显然给出的图中必定存在环。我们只需要用f[u][i]表示从u节点出发走\(2^{i}\)步能走到的节点。时间复杂度\(O(nlogk)\)
代码如下:

#include<bits/stdc++.h>

using namespace std;

long long t;
const long long N = 2e5 + 10;
long long n,k;
long long x[N],a[N];
long long f[N][65];

void solve() {
    cin >> n >> k;
    for(long long i = 1;i <= n;i++) {
        cin >> x[i];
        f[i][0] = x[i];
    }
    for(long long i = 1;i <= n;i++) cin >> a[i];
    for(long long i = 1;i <= 64;i++)
        for(long long j = 1;j <= n;j++)
            f[j][i] = f[f[j][i-1]][i-1];
    for(long long i = 1;i <= n;i++) {
        long long u = i;
        for(int j = 0;j <= 62;j++) {
            long long t = pow(2,j);
            if((k & t) != 0) u = f[u][j];
        }
        cout << a[u] << ' ';
    }
}

signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    t = 1;
    while(t--) solve();

    return 0;
}

值得注意的是,由于$ << $运算符只能算到31位二进制,再多就会出错,所以这里用了pow

标签:复杂度,ABC367E,long,times,步能,图上,此题,倍增,节点
From: https://www.cnblogs.com/lwiwi/p/18664809

相关文章

  • 关于此题[ABC367F] Rearrange Query随机化哈希的一些总结
    传送门这道题要求我们对于非常多的询问回答[l,r]、[L,R]这样两个区间内A、B数组中各个数的出现次数是否相同。看到这道题似乎想到了刚开始学编程的时候就想过的一个问题(bushi,那就是我能不能直接用,例如说这段区间和是否相同,或者说这段区间乘积之类的是否相同来判断这个区间各个数......
  • 关于此题CF[Hello 2025] 2057C - Trip to the Olympiad的一些总结
    传送门题目大意:给定两个数l,r,试求l~r中选三个数a,b,c,使得\((axorb)+(bxorc)+(axorc)\)的值最大。有关此类异或最大的题目,首先想到的是确定最高位,因为假如说异或后二进制下k位置为1,那么此时答案就已经比k位置不为1,而k以后的位置都是1的情况要大了。而观察l,r这两个数,我......
  • 银河麒麟Linux同步时间:NTPd、Chrony、systemd-timesyncd 配置与使用
    1.时间同步协议服务对比在网络中,常用的时间同步协议服务主要有以下几种:特性NTPdsystemd-timesyncdChrony协议NTPSNTPNTP说明NTPd(NetworkTimeProtocoldaemon)是最经典的时间同步服务,使用NTP协议来同步系统时间。它支持复杂的配置,能够处理多个时间源,并且具有......
  • 关于此题[ABC382E] Expansion Packs 概率DP的一些总结
    传送门首先看到这道题,我们发现想要求收集K个卡牌的期望开包数,必须要先求出每个包开出0~n张卡各自的概率,于是预示着这道题将要进行两次概率DP。首先我们求每个包开出0~n张卡各自的概率。这个很好求,我们假设f[i][j]表示前\(i\)张卡中开出\(j\)张卡的概率,那么显然有:\(f[i][j]=p[......
  • 关于此题E - Maximize XOR(Atcoder ABC 386)搜索技巧的一些总结
    传送门题目要求n个数中选k个数异或起来最大,我们想到字典树中最大异或和这一经典问题,但是很明显字典树只能解决任选两个数的最大异或,而此题是任选k个,那我们走投无路只能考虑爆搜。首先可以很容易写出一个暴力的搜索:voiddfs1(longlongpos,longlongsum,longlongkk){i......
  • jstl一些标签 中timestamp类型在页面去掉时分秒!
    jstl一些标签中timestamp类型在页面去掉时分秒!|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|--------......
  • 关于SQLserver中timestamp字段与datetime转换溢出的原由与解决办法
    在做系统数据同步时,ERP厂商会在某个表单中设定timestamp的时间戳的字段。当数据在更改时,timestamp字段会进行自动更新。查看时间戳的语句为:SELECT@@dbts 特别注意:有些时候timestamp可能进行转换成datetime,SQL语句为:selectcast(timestamp_fieldasdatetime)astimestamp_f......
  • MySQL 中 DATETIME 和 TIMESTAMP 类型的区别是什么?
    在MySQL中,DATETIME和TIMESTAMP都是用于存储日期和时间的类型,但它们有一些关键的区别:1.存储方式和范围DATETIME:存储的日期和时间值是以“年-月-日时:分:秒”的格式表示。存储格式:DATETIME存储的是固定的日期和时间信息,不受时区的影响。范围:DATETIME的值范围为'1000-01-0......
  • C#中的DateTime、DateTimeOffset和TimeSpan(链接)
    下面的微软官方文档,介绍了C#中的DateTime:DateTimeStructSystem.DateTimestruct其中这里有提到,DateTime的精度为100纳秒:Timevaluesaremeasuredin100-nanosecondunitscalledticks.DateTime.TicksProperty属性可以返回DateTime代表的100纳秒数。而DateTime(Int64)......
  • TimeSformer模型:视频理解领域的全新突破
    在视频内容日益丰富的今天,如何高效地分析和理解视频数据已成为人工智能领域的重要课题。由Meta团队开发的TimeSformer模型,通过将Transformer架构引入视频理解领域,为这一问题提供了创新的解决方案。本文将详细介绍TimeSformer模型,并探讨其应用前景。模型背景TimeSformer模......