結果
問題 | No.421 しろくろチョコレート |
ユーザー |
|
提出日時 | 2020-05-20 05:28:31 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 104 ms / 2,000 ms |
コード長 | 3,399 bytes |
コンパイル時間 | 346 ms |
コンパイル使用メモリ | 12,928 KB |
実行使用メモリ | 14,848 KB |
最終ジャッジ日時 | 2024-09-23 07:26:18 |
合計ジャッジ時間 | 5,604 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 65 |
ソースコード
import sys, refrom collections import deque, defaultdict, Counterfrom math import ceil, sqrt, hypot, factorial, pi, sin, cos, radiansfrom itertools import accumulate, permutations, combinations, product, groupby, combinations_with_replacementfrom operator import itemgetter, mulfrom copy import deepcopyfrom string import ascii_lowercase, ascii_uppercase, digitsfrom bisect import bisect, bisect_leftfrom math import gcdfrom heapq import heappush, heappopfrom functools import reducedef input(): return sys.stdin.readline().strip()def INT(): return int(input())def MAP(): return map(int, input().split())def LIST(): return list(map(int, input().split()))def ZIP(n): return zip(*(MAP() for _ in range(n)))sys.setrecursionlimit(10 ** 9)INF = float('inf')mod = 10 ** 9 + 7class HopcroftKarp:def __init__(self, N0, N1):self.N0 = N0self.N1 = N1self.N = N = 2+N0+N1self.G = [[] for i in range(N)]for i in range(N0):forward = [2+i, 1, None]forward[2] = backward = [0, 0, forward]self.G[0].append(forward)self.G[2+i].append(backward)self.backwards = bs = []for i in range(N1):forward = [1, 1, None]forward[2] = backward = [2+N0+i, 0, forward]bs.append(backward)self.G[2+N0+i].append(forward)self.G[1].append(backward)def add_edge(self, fr, to):#assert 0 <= fr < self.N0#assert 0 <= to < self.N1v0 = 2 + frv1 = 2 + self.N0 + toforward = [v1, 1, None]forward[2] = backward = [v0, 0, forward]self.G[v0].append(forward)self.G[v1].append(backward)def bfs(self):G = self.Glevel = [None]*self.Ndeq = deque([0])level[0] = 0while deq:v = deq.popleft()lv = level[v] + 1for w, cap, _ in G[v]:if cap and level[w] is None:level[w] = lvdeq.append(w)self.level = levelreturn level[1] is not Nonedef dfs(self, v, t):if v == t:return 1level = self.levelfor e in self.it[v]:w, cap, rev = eif cap and level[v] < level[w] and self.dfs(w, t):e[1] = 0rev[1] = 1return 1return 0def flow(self):flow = 0G = self.Gbfs = self.bfs; dfs = self.dfswhile bfs():*self.it, = map(iter, G)while dfs(0, 1):flow += 1return flowdef matching(self):return [cap for _, cap, _ in self.backwards]H, W = MAP()S = [input() for _ in range(H)]U = H*Whk = HopcroftKarp(U, U)dx = [0, -1, 0, 1]dy = [1, 0, -1, 0]nb = 0nw = 0for i in range(H):for j in range(W):if S[i][j] == "b":nb += 1elif S[i][j] == "w":nw += 1if (i+j)%2 == 0 and S[i][j] == "w":for k in range(4):ny = i+dy[k]nx = j+dx[k]if 0 <= ny <= H-1 and 0 <= nx <= W-1 and S[ny][nx] == "b":hk.add_edge(i*W+j, ny*W+nx)ans = 0f = hk.flow()ans += 100*fnb, nw = nb-f, nw-fm = min(nb, nw)ans += 10*mnb, nw = nb-m, nw-mans += max(nb, nw)print(ans)