結果

問題 No.1479 Matrix Eraser
ユーザー shotoyooshotoyoo
提出日時 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
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 38 ms
51,968 KB
testcase_01 AC 38 ms
52,864 KB
testcase_02 AC 38 ms
52,352 KB
testcase_03 WA -
testcase_04 AC 39 ms
52,608 KB
testcase_05 WA -
testcase_06 WA -
testcase_07 AC 138 ms
83,968 KB
testcase_08 AC 170 ms
86,784 KB
testcase_09 AC 260 ms
99,208 KB
testcase_10 AC 405 ms
111,628 KB
testcase_11 AC 287 ms
101,376 KB
testcase_12 AC 146 ms
85,500 KB
testcase_13 AC 168 ms
86,912 KB
testcase_14 AC 147 ms
85,644 KB
testcase_15 AC 93 ms
77,600 KB
testcase_16 AC 156 ms
86,792 KB
testcase_17 AC 466 ms
116,668 KB
testcase_18 AC 456 ms
116,796 KB
testcase_19 AC 462 ms
116,912 KB
testcase_20 AC 455 ms
116,636 KB
testcase_21 AC 456 ms
116,396 KB
testcase_22 AC 479 ms
117,120 KB
testcase_23 AC 459 ms
116,648 KB
testcase_24 AC 465 ms
116,500 KB
testcase_25 AC 463 ms
116,912 KB
testcase_26 AC 460 ms
116,388 KB
testcase_27 WA -
testcase_28 WA -
testcase_29 WA -
testcase_30 WA -
testcase_31 WA -
testcase_32 AC 184 ms
97,996 KB
testcase_33 AC 186 ms
97,928 KB
testcase_34 AC 186 ms
98,180 KB
testcase_35 AC 185 ms
97,832 KB
testcase_36 AC 187 ms
97,848 KB
testcase_37 AC 67 ms
75,776 KB
testcase_38 AC 361 ms
94,692 KB
testcase_39 AC 402 ms
123,696 KB
testcase_40 AC 38 ms
51,968 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

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)
0