색깔 모으기

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

요약
각 색깔이 정확히 두 개씩 N개의 상자에 쌓여 있을 때, 규칙을 지키며 공을 옮겨 같은 색 두 공을 한 상자에 모으는 최소 이동 횟수를 구하고 불가능하면 -1을 출력한다.
난이도

어려움10점 중 8점

유형
그래프, 그리디, 구현, 시뮬레이션
정답자
아직 제출이 없습니다

문제

2N2N개의 공과 N+1N+1개의 상자가 있다. 공들의 색깔은 1,2,⋯ ,N1, 2, \cdots, N 중 하나이며, 각 색깔에 대해 그 색깔로 칠해진 공은 정확히 22개 있다. 각 상자는 공을 최대 22개까지 가지고 있을 수 있다. 처음에는 첫 번째 상자부터 NN번째 상자에 각각 22개의 공이 들어 있고, N+1N+1번째 상자는 비어 있다. ii번째 상자의 위에 있는 공의 색깔은 A_iA\_i이고, 아래에 있는 공의 색깔은 B_iB\_i이다.

한 상자에서 다른 상자로 공을 옮길 수 있는데, 상자의 가장 위에 있는 공을 빼서 다른 상자의 가장 위에 넣는 작업을 할 수 있다.

여러분은 같은 색으로 칠해진 22개의 공이 같은 상자에 들어가도록 공을 옮겨야 한다. 이때, 공을 옮기는 작업을 할 때마다 다음 두 조건 중 하나를 만족해야 한다.

  • 옮겨서 공을 놓으려는 상자가 완전히 비어 있어야 한다.
  • 옮겨서 공을 놓으려는 상자에 공이 정확히 하나 들어 있고, 이동하려는 공과 해당 상자에 있는 공의 색깔이 같아야 한다.

색깔이 같은 공이 같은 상자에 들어가도록 하기 위해 필요한 공의 이동 횟수의 최솟값을 구하는 프로그램을 작성하라.

예를 들어, 위 그림에서 아래와 같이 공을 옮기면 66번의 이동으로 색깔이 같은 공이 같은 상자에 들어가게 되고, 공을 66번보다 적게 옮겨서 목표를 달성하는 것은 불가능하다.

  • 네 번째 상자의 색깔이 33인 공을 여섯 번째 상자로 옮긴다.
  • 세 번째 상자의 색깔이 22인 공을 네 번째 상자로 옮긴다.
  • 첫 번째 상자의 색깔이 44인 공을 세 번째 상자로 옮긴다.
  • 두 번째 상자의 색깔이 33인 공을 여섯 번째 상자로 옮긴다.
  • 다섯 번째 상자의 색깔이 55인 공을 두 번째 상자로 옮긴다.
  • 다섯 번째 상자의 색깔이 11인 공을 첫 번째 상자로 옮긴다.

입력

첫 번째 줄에 NN이 주어진다.

두 번째 줄부터 NN개의 줄에 걸쳐 각 상자에 들어 있는 두 공들의 색깔이 주어진다. NN개의 줄 중 ii번째 줄에는 A_i,B_iA\_i, B\_i가 공백으로 구분되어 주어진다.

출력

첫 번째 줄에 색깔이 같은 공이 같은 상자에 들어가도록 하기 위해 필요한 공의 이동 횟수의 최솟값을 출력한다.

단, 불가능하다면 −1-1을 출력한다.

제한

  • 주어지는 모든 수는 정수이다.
  • 1≤N≤200,0001 \le N \le 200\\,000
  • 1≤A_i,B_i≤N1 \le A\_i, B\_i \le N
  • 각 ii (1≤i≤N1 \le i \le N)에 대해서 A_1,A_2,⋯ ,A_N,B_1,B_2,⋯ ,B_NA\_1, A\_2, \cdots, A\_N, B\_1, B\_2, \cdots, B\_N중 정확히 22개의 값이 ii와 같다.

예제3

  1. 예제 1

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

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

    입력
    4
    2 1
    3 1
    2 4
    3 4
    
    예상 출력
    -1