아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

해킹

면접 대비

시간 제한2초메모리 제한512 MB

요약
각 방에서 다음 방으로 가는 간선이 하나씩 있는 그래프에서 간선을 최대 하나만 바꿔 한 시작점에서 방문할 수 있는 서로 다른 방의 수를 최대로 만든다.
난이도

보통10점 중 6점

유형
그래프, 구현
정답자
아직 제출이 없습니다

문제

명찬은 최근에 게임 하나를 시작했다. 리버스 엔지니어링의 고수인 명찬은 게임을 뜯어 본 결과 이 게임에서 제공하는 던전 탐사 컨텐츠가 아래와 같은 구성을 지니고 있다는 것을 알아냈다.

  • 던전은 총 N(2≤N≤2⋅105)N(2 \le N \le 2 \cdot 10^5)개의 방으로 구성되어 있다.
  • ii번째 방을 클리어하면 a_i(1≤a_i≤N,a_i≠i)a\_i( 1 \le a\_i \le N, a\_i \neq i) 번 방으로 이동하게 된다.
  • 플레이어는 NN개의 방 중 하나의 방을 골라 해당 방에서 탐사를 시작할 수 있다.
  • 플레이어는 던전 탐사의 결과로 방문한 방의 개수에 비례한 보상을 받게 된다. 같은 방에 여러 번 방문하여도 방문한 방의 개수는 하나로 생각한다.

명찬은 게임에서 최대의 이익을 보기 위해 게임을 해킹한 결과, ii번째 방을 클리어한 후 이동하게 되는 다음 방 a_ia\_i를 마음대로 바꿀 수 있게 됐다. 하지만 너무 많은 것을 바꾸면 운영진한테 걸릴 수 있으므로, 최대 하나의 방에 대해서만 a_ia\_i 값을 바꾸려고 한다.

이 때, 명찬이 방문 가능한 방의 최대 개수를 출력하여라.

입력

첫 줄에 방의 개수 NN이 주어진다(2 ≤N≤2⋅1052 \le N \le 2 \cdot 10^5 ).

둘째 줄에 각 방을 클리어한 후 이동하게 되는 방의 번호 a_1,a_2,…,a_Na\_1, a\_2, \dots, a\_N이 순서대로 공백으로 구분되어 주어진다(1≤a_i≤N1 \le a\_i \le N).

출력

첫째 줄에 명찬이 방문 가능한 방의 최대 개수를 출력한다.

예제2

  1. 예제 1

    입력
    4
    2 1 4 3
    
    예상 출력
    4
    
  2. 예제 2

    입력
    6
    2 3 4 2 4 4
    
    예상 출력
    5