题意:
解法:
第一种情况:
第二种情况:
其实第二种情况可以归到第一种情况里,就是多出来的部分长度为0而已。
我们只需要先爬到环的位置,然后k就可以对环的长度取模了,取模之后在环上继续走就行了:
总复杂度O(n)
code:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxm=2e6+5;
int mark[maxm];
int a[maxm];
int n,k;
void solve(){
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int x=1;
mark[x]=1;
int cnt=1;
while(!mark[a[x]]){
x=a[x];
mark[x]=1;
cnt++;
}
int y=1;
while(k&&y!=a[x]){
y=a[y];
k--;
cnt--;
}
k%=cnt;
while(k){
y=a[y];
k--;
}
cout<<y<<endl;
}
signed main(){
ios::sync_with_stdio(0);
solve();
return 0;
}