結果
| 問題 |
No.1479 Matrix Eraser
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-05-25 01:37:10 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,945 bytes |
| コンパイル時間 | 546 ms |
| コンパイル使用メモリ | 82,048 KB |
| 実行使用メモリ | 123,696 KB |
| 最終ジャッジ日時 | 2024-10-13 09:48:14 |
| 合計ジャッジ時間 | 14,091 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 31 WA * 8 |
ソースコード
import sys
input = lambda : sys.stdin.readline().rstrip()
sys.setrecursionlimit(2*10**5+10)
write = lambda x: sys.stdout.write(x+"\n")
debug = lambda x: sys.stderr.write(x+"\n")
writef = lambda x: print("{:.12f}".format(x))
def sub(es):
d = {}
ns = {}
for u,v in es:
d.setdefault(u, 0)
d.setdefault(v, 0)
ns.setdefault(u, set())
ns.setdefault(v, set())
d[u] += 1
d[v] += 1
ns[u].add(v)
ns[v].add(u)
done = set()
ans = 0
used = set()
for u in ns.keys():
if u in done:
continue
q = [u]
l = []
ll = 0
rr = 0
while q:
u = q.pop()
if d[u]==1:
l.append(u)
if u<h:
ll += 1
else:
rr += 1
for v in ns[u]:
if v in done:
continue
done.add(v)
q.append(v)
if not l:
ans += min(ll,rr)
else:
while l:
# print(l,d)
# breakpoint()
u = l.pop()
if d[u]==0:
continue
v = ns[u].pop()
if d[v]==0:
continue
assert d[v]>0
if v not in used:
used.add(v)
ans += 1
for u in ns[v]:
d[u] -= 1
ns[u].discard(v)
if d[u]==1:
l.append(u)
return ans
h,w = list(map(int, input().split()))
d = {}
for i in range(h):
l = list(map(int, input().split()))
for j in range(w):
v = l[j]
if v==0:
continue
d.setdefault(v, [])
d[v].append((i,j+h))
ans = 0
for k,es in d.items():
v = sub(es)
ans += v
# print(es,v)
print(ans)