#include #include #include static inline constexpr std::vector prepare(const uint_fast32_t N, const std::vector& P) noexcept { std::vector is_master(N + 1, true); for (uint_fast32_t i = 1; i <= N; ++i) is_master[P[i]] = false; return is_master; } static inline constexpr uint_fast32_t solve(const uint_fast32_t N, const std::vector& P) noexcept { const std::vector is_master = prepare(N, P); std::vector is_target(N + 1, false); for (uint_fast32_t i = 1; i <= N; ++i) if (is_master[i]) is_target[P[P[i]]] = true; uint_fast32_t ans = 0; for (uint_fast32_t i = 1; i <= N; ++i) if (is_target[i]) ++ans; return ans; } int main() { std::cin.tie(nullptr); std::ios::sync_with_stdio(false); uint_fast32_t N, i; std::cin >> N; std::vector P(N + 1); for (i = 1; i <= N; ++i) std::cin >> P[i]; std::cout << solve(N, P) << '\n'; return 0; }