시스템 엔지니어

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

요약
각 작업이 사용할 수 있는 서버 목록이 주어질 때, 작업을 서로 다른 서버에 배정하는 최대 매칭 수를 구합니다.
난이도

보통10점 중 6점

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

문제

Bob는 노련한 시스템 엔지니어이다. 그는 늘 까다로운 문제와 씨름하는데, 이번에도 새로운 문제를 풀어야 한다. 그는 성능이 서로 다른 여러 대의 서버로, 오랫동안(혹은 무기한) 처리해야 하는 지속적인 작업 요청들을 처리해야 한다. 지속적인 작업 요청들이 차례로 들어오며, 각 요청은 그 작업을 처리할 수 있는 서버들의 부분집합을 알려 준다. 하나의 작업은 하나의 서버에서만 처리되고, 하나의 서버는 하나의 작업만 처리한다. Bob은 서버들에 최대한 많은 수의 작업을 배치해야 한다. 예를 들어 두 작업 j1j_1, j2j_2와 두 서버 s1s_1, s2s_2가 있고, j1j_1과 j2j_2가 모두 서버 s1s_1을 필요로 한다면, Bob은 오직 한 개의 작업만 배치할 수 있다.

일반적으로, 00부터 n−1n-1까지 번호가 매겨진 nn개의 작업과, nn부터 2n−12n-1까지 번호가 매겨진 nn개의 서버, 그리고 작업 요청들의 목록이 주어진다. 처리할 수 있는 작업의 최대 개수를 구하여라.

입력

입력은 표준 입력으로 주어지며 크기는 최대 1 MB1\,\text{MB}이다. 입력에는 여러 개의 데이터 집합이 들어 있을 수 있고, 각 데이터 집합은 하나의 작업 집합을 나타낸다.

각 데이터 집합은 작업의 개수 nn (n≤10000n \le 10000)으로 시작하며, 이어서 각 작업이 필요로 하는 서버들의 목록이 다음 형식으로 주어진다.

작업번호: (서버수) s_1 … s_서버수

공백(스페이스, 줄바꿈 등)은 어디에나 자유롭게 들어갈 수 있다. 입력 데이터는 항상 올바르며, 파일의 끝(EOF)에서 종료된다.

출력

각 데이터 집합마다, 처리할 수 있는 작업의 최대 개수를 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    2
    0: (1) 2
    1: (1) 2
    1
    0: (1) 1
    
    예상 출력
    1
    1