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

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

레스토랑

시간 제한3초메모리 제한2048 MB

요약
고객과 식당 양쪽이 선호 순위를 가지며 식당마다 정원이 있을 때, 안정적인 배정을 찾아 배정된 고객 번호를 오름차순으로 출력한다.
난이도

어려움10점 중 8점

유형
그리디, 해시맵, 구현, 정렬
정답자
아직 제출이 없습니다

문제

모두가 파리에 있는 레스토랑에 다시 가게 되어 매우 기뻐한다. 하지만 당분간 레스토랑은 좌석 수가 매우 제한적이다. 두 레스토랑이 가능한 한 많은 사람을 받을 수 있고, 손님이 원하는 좌석에 들어갈 수 있도록 하려 한다.

NN명의 손님과 MM개의 레스토랑이 있고, 손님은 11부터 NN까지, 레스토랑은 11부터 MM까지 번호가 매겨져 있다. 각 손님은 레스토랑의 부분집합에 예약을 하고, 자신의 예약 목록을 선호도 순으로 제시한다. 각 레스토랑은 받은 예약을 자체적인 선호 순서로 정렬한다. 예를 들어 레스토랑은 먼저 등록한 손님을 더 높게 평가할 수 있다. 각 레스토랑 ii에는 정원 c_ic\_i, 즉 수용할 수 있는 최대 손님 수가 있다.

다음 조건을 만족하도록 일부 손님을 레스토랑에 배정하는 방법을 찾아야 한다.

  1. 어떤 레스토랑도 정원보다 많은 손님을 받지 않는다.

  2. 각 손님은 많아야 한 레스토랑에서 테이블을 받는다.

  3. 레스토랑 rr과 rr에 예약한 손님 cc의 쌍 중에서 다음을 모두 만족하는 경우가 없다.

    • cc가 테이블을 받지 못했거나, cc가 배정받은 레스토랑보다 rr을 더 선호한다.
    • rr에 빈 좌석이 있거나, rr이 만석이지만 rr에 배정된 손님 중 적어도 한 명보다 cc를 더 선호한다.

추가로 알아 둘 점:

  • 모든 손님은 적어도 하나의 예약을 했다.
  • 레스토랑은 자신에게 예약을 한 손님만 평가한다. 레스토랑에 예약한 손님이 한 명도 없을 수 있다.

입력

첫째 줄에 NN과 MM이 주어진다.

다음 MM개의 줄은 정원을 나타내며, ii번째 줄에는 레스토랑 ii의 정원 c_ic\_i가 정수로 주어진다.

이어서 NN개의 줄이 주어진다. ii번째 줄은 손님 ii의 예약 목록을 선호도 순으로 나타낸다. 이 줄에는 서로 다른 정수(1 이상 MM 이하)가 공백으로 구분되어 선호도가 높은 것부터 낮은 것 순으로 주어진다.

이어서 MM개의 줄이 주어진다. ii번째 줄은 레스토랑 ii의 정렬된 선호도를 나타낸다. 이 줄에는 레스토랑 ii에 예약한 손님이 없을 경우 숫자 0이 주어지고, 그렇지 않으면 레스토랑 ii에 예약한 손님의 번호가 서로 다른 정수로 공백으로 구분되어 레스토랑이 선호하는 순서대로 주어진다.

출력

위 규칙에 따라 가능한 배정 중 하나에서 테이블을 받은 손님의 집합을 출력한다. 집합은 한 줄에 손님 하나씩, 번호 오름차순으로 출력한다.

제한

  • 1≤N≤50 0001\leq N \leq 50\,000
  • 1≤M≤10 0001\leq M \leq 10\,000
  • 예약 선택지의 총 개수는 1 000 0001\,000\,000 이하이다.
  • 1≤c_i≤N1\leq c\_i \leq N

예제1

  1. 예제 1

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