結果
問題 | No.177 制作進行の宮森あおいです! |
ユーザー |
![]() |
提出日時 | 2016-11-27 00:41:30 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 116 ms / 2,000 ms |
コード長 | 2,319 bytes |
コンパイル時間 | 487 ms |
コンパイル使用メモリ | 82,048 KB |
実行使用メモリ | 79,488 KB |
最終ジャッジ日時 | 2024-11-27 11:39:42 |
合計ジャッジ時間 | 2,655 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 13 |
ソースコード
# coding: utf-8import queueclass Dinic:"""Implementation of Dinic's Alogorithm"""def __init__(self, v, inf = 1000000007):self.V = vself.inf = infself.G = [[] for _ in range(v)]self.level = [0 for _ in range(v)]self.iter = [0 for _ in range(v)]def add_edge(self, from_, to, cap):self.G[from_].append({'to':to, 'cap':cap, 'rev':len(self.G[to])})self.G[to].append({'to':from_, 'cap':0, 'rev':len(self.G[from_])-1})# sからの最短距離をbfsで計算def bfs(self, s):self.level = [-1 for _ in range(self.V)]self.level[s] = 0;que = queue.Queue()que.put(s)while not que.empty():v = que.get()for i in range(len(self.G[v])):e = self.G[v][i]if e['cap'] > 0 and self.level[e['to']] < 0:self.level[e['to']] = self.level[v] + 1que.put(e['to'])# 増加バスをdfsで探すdef dfs(self, v, t, f):if v == t: return ffor i in range(self.iter[v], len(self.G[v])):self.iter[v] = ie = self.G[v][i]if e['cap'] > 0 and self.level[v] < self.level[e['to']]:d = self.dfs(e['to'], t, min(f, e['cap']))if d > 0:e['cap'] -= dself.G[e['to']][e['rev']]['cap'] += dreturn dreturn 0def max_flow(self, s, t):flow = 0while True:self.bfs(s)if self.level[t] < 0 : return flowself.iter = [0 for _ in range(self.V)]f = self.dfs(s,t, self.inf)while f > 0:flow += ff = self.dfs(s,t, self.inf)W = int(input())N = int(input())J = [int(x) for x in input().split()]M = int(input())C = [int(x) for x in input().split()]mf = Dinic(N+M+2)source, sink = N+M, N+M+1INF = 10**9for i, j in enumerate(J):mf.add_edge(source, i, j)for i, c in enumerate(C):mf.add_edge(N+i, sink, c)_, *X = [int(x)-1 for x in input().split()]for j in range(N):if j not in X:mf.add_edge(j, i+N, INF)maxflow = mf.max_flow(source, sink)print("SHIROBAKO" if maxflow >= W else "BANSAKUTSUKITA")