思路:
听y总说这种环经常遇到,最好记住他
交换操作:每次操作最多让环加一
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int N=10010;
int n=scanner.nextInt();
int[] arr=new int[N];
boolean[] st=new boolean[N];//记录该点是否遍历
for(int i=1;i<=n;i++)
arr[i]=scanner.nextInt();
int cnt=0;//记录环的个数
for(int i=1;i<=n;i++) {//计算有多少个环,最少操作就是从cnt个环变到n个环的差值
if(!st[i]) {//若没有遍历过,所以是在另一个环上
cnt++;
for(int j=i;st[j]!=true;j=arr[j]) {//让该点所在环的所有点都标记
st[j]=true;
}
}
}
System.out.println(n-cnt);
}