solution.cpp 695 字节
Newer Older
每日一练社区's avatar
每日一练社区 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
#include <iostream>
#include <cstdio>

using namespace std;

const int N = 1e4 + 10;
bool st[N];
int a[N], n, k;

int main()
{
    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> a[i]; //瓶子初始序号

    for (int i = 1; i <= n; i++) //从每个正确序号出发
        if (!st[i])              //如果没有走过
        {
            k++;                              //环数量加一
            for (int j = i; !st[j]; j = a[j]) //走完这个环 每次变更指向a[j] 即瓶子初始序号的第j个
                st[j] = true;
        }

    cout << n - k; //环最简情况为自指 则最多有n个环 当前有k个环 从K达到n则需要n-k次

    return 0;
}