파일 업로드

방문

profile
실행 시간 제한메모리 제한
2 초1024 MB
📃 해결할 문제

길동의 도시에는 NN (2N1052 \le N \le 10^5) 명의 사람들이 살고 있으며, 각자의 집을 소유하고 있습니다. 이 사람들을 편리하게 1N1 \ldots N로 표시하겠습니다. 각 1iN1 \le i \le N에 대해, 사람 ii는 사람 aia_i (aiia_i \neq i)의 집에 방문하려고 합니다.

순열 (p1,p2,,pN)(p_1,p_2, \ldots, p_N) of 1N1 \ldots N가 주어질 때, 방문은 다음과 같이 이루어집니다.

11부터 NN까지의 각 ii에 대해:

만약 사람 apia_{p_i}가 이미 자신의 집을 떠났다면, 그럼 사람 pip_i는 자신의 집에 남습니다.`
그렇지 않다면, 사람 pip_i는 자신의 집을 떠나 사람 apia_{p_i}의 집에 방문합니다. 이 방문은 박수를 vpiv_{p_i} 번 칩니다 (0vpi1090 \le v_{p_i} \le 10^9).
모든 방문이 끝난 후 가능한 모든 순열 pp에 대해 가장 큰 박수의 수를 구하십시오.

💻 입력

첫 번째 줄에는 NN이 들어있습니다.

1iN1 \le i \le N에 대하여, i+1i+1번째 줄에는 두 개의 공백으로 구분된 정수 aia_iviv_i가 있습니다.

🖨️ 출력

답을 나타내는 단일 정수를 적습니다.

이 문제에는 큰 크기의 정수가 사용되므로 64비트 정수 데이터 형식(e.g., C / C++에서의 "long long")이 필요할 수 있습니다.


💻 예제 입력 1
4
2 10
3 20
4 30
1 40
🖨️ 예제 출력 1
90

💡 힌트

p=(1,4,3,2)p=(1,4,3,2)일 경우:

  • 1번 사람: 2번 집으로 가서 10번 박수를 칩니다.
  • 4번 사람: 1번 사람 집으로 가려고 했지만, 1번 사람이 집에 없어서 그냥 집에 남습니다.
  • 3번 사람: 4번 집으로 가서 30번 박수를 칩니다.
  • 2번 사람: 3번 사람 집으로 가려고 했지만, 3번 사람이 집에 없어서 그냥 집에 남습니다.
    이렇게 되면, 박수의 총 횟수는 10 + 30 = 40번입니다.

p=(2,3,4,1)p=(2,3,4,1)일 경우:

  • 2번 사람: 3번 집으로 가서 20번 박수를 칩니다.
  • 3번 사람: 4번 집으로 가서 30번 박수를 칩니다.
  • 4번 사람: 1번 집으로 가서 40번 박수를 칩니다.
  • 1번 사람: 2번 사람 집으로 가려고 했지만, 2번 사람이 집에 없어서 그냥 집에 남습니다.
    이렇게 되면, 박수의 총 횟수는 20 + 30 + 40 = 90번입니다. 가능한 모든 순서 중에서, 이 순서에서 가장 많이 박수를 치게 됩니다.

출처: USACO 2022 US Open Contest, Silver Problem 1. Visits