메시지 릴레이

시간 제한1초메모리 제한128 MB

요약
각 소가 많아야 한 마리에게만 메시지를 넘길 때, 메시지가 순환하지 않고 멈추는 소의 수를 센다.
난이도

보통10점 중 4점

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

문제

농부 존의 소 NN마리(1≤N≤10001 \le N \le 1000)에 11부터 NN까지 번호가 매겨져 있다. 소들은 깡통과 실을 이용한 옛날식 통신 장치로 농부 존 몰래 서로 메시지를 주고받는다.

각 소는 받은 메시지를 최대 한 마리의 다른 소에게만 전달할 수 있다. 소 ii에 대해 값 F(i)F(i)는 소 ii가 받은 메시지를 넘겨줄 상대 소의 번호이며, 이 값은 항상 ii와 다르다. F(i)F(i)가 00이면 소 ii는 메시지를 전달하지 않는다.

어떤 소에서 출발한 메시지는 결국 순환(loop)에 갇혀 영원히 돌 수도 있다. 어떤 소에서 보낸 메시지가 언젠가 이런 순환에 빠지면 그 소를 "루피(loopy)"하다고 부른다. 소들은 루피한 소에서 메시지를 보내는 일을 피하고 싶어 한다. 루피하지 않은 소가 모두 몇 마리인지 세어라.

입력

  • 첫째 줄: 소의 수 NN.
  • 둘째 줄부터 N+1N+1번째 줄까지: i+1i+1번째 줄에 F(i)F(i)의 값이 주어진다.

출력

  • 첫째 줄: 루피하지 않은 소의 총 마리 수.

힌트

소가 5마리인 경우를 생각해 보자. 소 1은 메시지를 전달하지 않으므로 루피하지 않다. 소 3은 소 1에게 전달하고 소 1은 더 이상 전달하지 않으므로 소 3도 루피하지 않다. 나머지 소들은 메시지가 4→5→4→5→⋯4 \to 5 \to 4 \to 5 \to \cdots 처럼 순환에 갇히므로 모두 루피하다. 따라서 루피하지 않은 소는 2마리다.

예제2

  1. 예제 1

    입력
    5
    0
    4
    1
    5
    4
    
    예상 출력
    2
    
  2. 예제 2

    입력
    1
    0
    
    예상 출력
    1