#include<iostream>
using namespace std;
int N,a[100000],visited[100000]={0};
int cycle_length;
void dfs(int i)
{
if(visited[i])return;
visited[i]=1;
cycle_length++;
dfs(a[i]);
}
int main()
{
cin>>N;
for(int i=0;i<N;i++)cin>>a[i];
int total=0;
for(int i=0;i<N;i++){
if(!visited[i]){
if(i!=a[i]){
cycle_length=0;
dfs(i);
if(i==0)total+=cycle_length-1;
else total+=cycle_length+1;
}
}
}
cout<<total;
}
//对于环中有0,环长为l,步数l-1
//对于环中无0,环长为l,步数l+1
1067 Sort with Swap(0, i)
于 2023-03-09 23:54:00 首次发布