[ABC377E] Permute K times 2 题解
考虑
考虑建图,连边
放代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int qpow(int a,int b,int m){
int r=1;
while(b){
if(b&1)(r*=a)%=m;
(a*=a)%=m,b>>=1;
}
return r;
}
main(){
ios::sync_with_stdio(false);
int n,k; cin>>n>>k;
vector<int> p(n),r(n);
for(auto &i:p)cin>>i,i--;
vector<bool> b(n);
for(int i=0;i<n;i++)
if(!b[i]){
vector<int> v;
for(int x=i;!b[x];x=p[x])
b[x]=true,v.emplace_back(x);
int d=qpow(2,k,v.size());
for(int i=0;i<v.size();i++)
r[v[i]]=v[(i+d)%v.size()];
}
for(int i:r)cout<<i+1<<' ';
cout<<endl;
return 0;
}