結果

問題 No.177 制作進行の宮森あおいです!
ユーザー Yuki_Utaai
提出日時 2018-03-18 22:06:20
言語 Python3
(3.13.1 + numpy 2.2.1 + scipy 1.14.1)
結果
AC  
実行時間 46 ms / 2,000 ms
コード長 3,450 bytes
コンパイル時間 230 ms
コンパイル使用メモリ 12,928 KB
実行使用メモリ 11,648 KB
最終ジャッジ日時 2024-12-30 03:03:39
合計ジャッジ時間 1,642 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 13
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=2435165
#AOJ
#FOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
import collections
class Dinic:
def __init__(self, n):
self.n = n
self.g = [[] for i in range(n)]
def add_edge(self, fr, to, cap):
self.g[fr].append([to, cap, len(self.g[to])])
self.g[to].append([fr, 0, len(self.g[fr])-1])
def add_multi_edge(self, v1, v2, cap1, cap2):
self.g[v1].append([v2, cap1, len(self.g[v2])])
self.g[v2].append([v1, cap2, len(self.g[v1])-1])
def bfs(self, s):
level = [-1]*self.n
deq = collections.deque()
level[s] = 0
deq.append(s)
while deq:
v = deq.popleft()
for e in self.g[v]:
if e[1]>0 and level[e[0]]<0:
level[e[0]] = level[v] + 1
deq.append(e[0])
self.level = level
def dfs(self, v, t, f):
if v==t: return f
es = self.g[v]
level = self.level
for i in range(self.it[v], len(self.g[v])):
e = es[i]
if e[1]>0 and level[v]<level[e[0]]:
d = self.dfs(e[0], t, min(f, e[1]))
if d>0:
e[1] -= d
self.g[e[0]][e[2]][1] += d
self.it[v] = i
return d
self.it[v] = len(self.g[v])
return 0
def max_flow(self, s, t):
flow = 0
while True:
self.bfs(s)
if self.level[t]<0: break
self.it = [0]*self.n
while True:
f = self.dfs(s, t, 10**9+7)
if f>0:
flow += f
else:
break
return flow
#FOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
#FOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
w=int(input())
n=int(input())
jj=[int(i) for i in input().split()]
m=int(input())
cc=[int(i) for i in input().split()]
qx=[]
for i in range(m):
qx.append([int(i) for i in input().split()])
del qx[i][0]
# if qx[i]==[]:
#FOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
#u,vc1FOOOOOOOOOOOO
V=n+m+2 #(st)
dinic = Dinic(V)
for i in range(n): #s0
u, v, c = 0, i+1, jj[i]
dinic.add_edge(u, v, c)
for i in range(m): # tV-1
u, v, c = i+n+1, V-1, cc[i]
dinic.add_edge(u, v, c)
for i in range(n): #
for j in range(m):
if i+1 not in qx[j]:
node1, node2, omomi = i+1, j+n+1, 100000
else:
node1, node2, omomi = i+1, j+n+1, 0
u, v, c = node1, node2, omomi
dinic.add_edge(u, v, c)
#print (dinic.max_flow(0, V-1))
if dinic.max_flow(0, V-1)>=w:
print("SHIROBAKO")
else:
print("BANSAKUTSUKITA")
#FOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
"""
input
V, E = [int(i) for i in input().split()]
dinic = Dinic(V)
for i in range(E):
u, v, c = [int(i) for i in input().split()]
dinic.add_edge(u, v, c)
print (dinic.max_flow(0, V-1))
"""
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0