結果
問題 | No.421 しろくろチョコレート |
ユーザー |
![]() |
提出日時 | 2019-11-01 14:07:55 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 236 ms / 2,000 ms |
コード長 | 1,401 bytes |
コンパイル時間 | 174 ms |
コンパイル使用メモリ | 82,084 KB |
実行使用メモリ | 79,224 KB |
最終ジャッジ日時 | 2024-09-23 07:24:47 |
合計ジャッジ時間 | 7,923 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 65 |
ソースコード
import syssys.setrecursionlimit(10**6)from collections import defaultdictdef dfs(v, t, f, used):if v == t:return fused[v] = Truefor nn, cap in edges[v].items():if not used[nn] and cap > 0:d = dfs(nn, t, min(f, cap), used)if d > 0:edges[v][nn] -= dedges[nn][v] += dreturn dreturn 0def max_flow(s, t):flow = 0while True:used = [False] * (N*M+2)f = dfs(s, t, 10**18, used)if f == 0:return flowflow += fN, M = map(int, input().split())S = [input() for _ in range(N)]edges = defaultdict(dict)wc, bc = 0, 0for i in range(N):for j in range(M):if S[i][j] == 'w':wc += 1edges[0][M*i+j+1] = 1edges[M*i+j+1][0] = 0for ni, nj in [(i-1, j), (i+1, j), (i, j-1), (i, j+1)]:if 0<=ni<N and 0<=nj<M and S[ni][nj] != '.':edges[M*i+j+1][M*ni+nj+1] = 1edges[M*ni+nj+1][M*i+j+1] = 0if S[i][j] == 'b':bc += 1edges[M*i+j+1][N*M+1] = 1edges[N*M+1][M*i+j+1] = 0max_pair = max_flow(0, N*M+1)wc -= max_pairbc -= max_pairprint(max_pair*100+min(wc, bc)*10+abs(wc-bc))