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

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

이상한 스위치

면접 대비

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

요약
각 스위치의 초기 상태와 뒤집는 스위치 목록이 주어질 때, 모든 스위치를 켜는 최소 누름 횟수를 구한다.
난이도

보통10점 중 6점

유형
BFS, 비트 연산, 그래프
정답자
아직 제출이 없습니다

문제

스위치는 켜져 있는 상태와 꺼져 있는 상태로 존재한다. 여러분은 꺼져 있는 스위치만 눌러 스위치를 켤 수 있다. 켜져 있는 스위치를 직접 끌 수 없음에 유의하자.

그런데, 회로를 잘못 연결해버린 나머지 어떤 스위치를 직접 켤 때, 해당 스위치가 영향을 주는 다른 스위치들의 상태는 모두 반전된다. 즉, 영향을 받는 스위치는 켜져 있었다면 꺼지고, 꺼져있었다면 켜진다. 영향을 받아 간접적으로 켜지는 스위치는 직접 켜지는 스위치가 아니다.

스위치마다 영향을 주는 스위치의 목록이 주어지고 각 스위치의 초기 상태가 주어질 때, 모든 스위치를 켜기 위해 스위치를 눌러야 하는 최소 횟수를 출력하자.

입력

첫째 줄에 스위치의 개수 NN이 주어진다.

둘째 줄에 ii번째 스위치의 초기 상태 A_1,A_2,⋯ ,A_NA\_1, A\_2, \cdots, A\_N이 공백으로 구분되어 주어진다. (A_i=0A\_i=0이면 꺼진 상태이고, A_i=1A\_i=1이면 켜진 상태이다.)

셋째 줄부터 NN개의 줄에 걸쳐 ii번째 스위치가 영향을 주는 스위치의 개수 C_iC\_i와 목록 B_i,1,B_i,2,⋯ ,B_i,C_iB\_{i,1}, B\_{i,2}, \cdots, B\_{i,C\_i}이 공백으로 구분되어 주어진다.

출력

모든 스위치를 켜기 위해 스위치를 눌러야 하는 최소 횟수를 출력한다. 모든 스위치를 켤 방법이 없다면, −1-1을 출력한다.

제한

  • 3≤N≤203 \leq N \leq 20
  • A_i=0A\_i=0 또는 A_i=1A\_i = 1
  • 0≤C_i<N0 \leq C\_i \lt N
  • 1≤j≤C_i1 \leq j \leq C\_i인 모든 jj에 대해서, 1≤B_i,j≤N1 \leq B\_{i,j} \leq N, B_i,j≠iB\_{i,j} \neq i를 만족하고, 배열 B_iB\_i 내의 값은 모두 다르다.
  • 입력으로 주어지는 모든 수는 정수이다.

예제3

  1. 예제 1

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

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

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