xxxxxxxxxx
from collections import deque
import heapq
def main():
N, M = map(int, input().split()) # N = 児童数, M = 保育園数
d = [[x-1 for x in list(map(int, input().split()))] for _ in range(N)] # d[i][j] = 児童 i の第 j 希望保育園
c = [[x-1 for x in list(map(int, input().split()))] for _ in range(M)] # c[j][i] = 保育所 j の第 i 優先児童
f = [[0]*N for _ in range(M)] # f[j][i] = 保育所 j は児童 i を第何優先にしているか
q = list(map(int, input().split())) # q[j] = 保育所 j の受入人数
for j in range(M):
for i in range(N):
f[j][c[j][i]] = i
P = deque() # P = 仮内定のない児童
Q = [deque() for i in range(N)] # Q[i] = 児童 i がまだ申し込んでいない保育園
mu = [-1] * N # mu[i] = 児童 i がマッチする保育園
A = [[] for _ in range(M)] # A[j] = 保育所 j が受け入れる児童の優先順位の集合
for i in range(N):
P.append(i)
for j in range(M):
Q[i].append(d[i][j])
while P:
i = P.popleft()
j = Q[i].popleft()
heapq.heappush(A[j], -f[j][i])
mu[i] = j
if len(A[j]) > q[j]:
i = c[j][-heapq.heappop(A[j])]
mu[i] = -1
P.append(i)
print(*[x+1 for x in mu])
if __name__ == '__main__':
main()
提出日時 | |
ユーザー | ![]() |
言語 | Python3 (CPython 3.8) |
結果 | AC |
実行時間 | 372 ms |
メモリ | 97132 kb |
テストケース名 | 結果 | 実行時間 | メモリ |
---|---|---|---|
max01.txt | AC | 258 ms | 97132 kb |
max02.txt | AC | 372 ms | 97132 kb |
sample01.txt | AC | 16 ms | 97132 kb |
test01.txt | AC | 87 ms | 97132 kb |
test02.txt | AC | 107 ms | 97132 kb |
test03.txt | AC | 64 ms | 97132 kb |
test04.txt | AC | 193 ms | 97132 kb |
test05.txt | AC | 56 ms | 97132 kb |
test06.txt | AC | 24 ms | 97132 kb |
test07.txt | AC | 81 ms | 97132 kb |
test08.txt | AC | 24 ms | 97132 kb |
test09.txt | AC | 45 ms | 97132 kb |
test10.txt | AC | 93 ms | 97132 kb |