結果
問題 | No.177 制作進行の宮森あおいです! |
ユーザー |
|
提出日時 | 2020-10-26 01:07:47 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 48 ms / 2,000 ms |
コード長 | 1,945 bytes |
コンパイル時間 | 160 ms |
コンパイル使用メモリ | 12,928 KB |
実行使用メモリ | 11,264 KB |
最終ジャッジ日時 | 2024-07-21 21:11:06 |
合計ジャッジ時間 | 1,478 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 13 |
ソースコード
from collections import dequeclass EDOMONDS_KARP():def __init__(self, N, s, t):self.N = N; self.s = s; self.t = tself.cap = [[0]*N for _ in range(N)]self.link = [[] for _ in range(N)]def add_edge(self, u, v, c):self.cap[u][v] = cself.link[u].append(v)self.link[v].append(u)def max_flow(self):N = self.N; s = self.s; t = self.tf = 0flow = [[0]*N for _ in range(N)]while True:m, prev = self.bfs(flow)if m == 0:breakf += mv = twhile v != s:u = prev[v]flow[u][v] += mflow[v][u] -=mv = ureturn (f, flow)def bfs(self, flow):N = self.N; s = self.s; t = self.tcap = self.caplink = self.linkprev = [-1]*N; prev[s] = -2m = [0]*N; m[s] = float('inf')q = deque([s])while q:u = q.popleft()for v in link[u]:if cap[u][v] - flow[u][v] > 0 and prev[v] == -1:prev[v] = um[v] = min(m[u], cap[u][v] - flow[u][v])if v != t:q.append(v)else:return (m[t], prev)return (0, prev)W = int(input())N = int(input())J = list(map(int, input().split()))M = int(input())C = list(map(int, input().split()))S, T = 0, N + M + 1EK = EDOMONDS_KARP(N + M + 2, S, T)for i in range(1, N + 1):EK.add_edge(S, i, J[i - 1])for i in range(1, M + 1):EK.add_edge(i + N, T, C[i - 1])for y in range(N + 1, N + M + 1):ls = list(map(int, input().split()))X = set(ls[1:])for x in range(1, N + 1):if not x in X:EK.add_edge(x, y, float('inf'))f, _ = EK.max_flow()print("SHIROBAKO" if f >= W else "BANSAKUTSUKITA")