結果

問題 No.1479 Matrix Eraser
ユーザー shotoyooshotoyoo
提出日時 2021-05-25 01:37:10
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,945 bytes
コンパイル時間 205 ms
コンパイル使用メモリ 81,920 KB
実行使用メモリ 123,952 KB
最終ジャッジ日時 2024-04-21 11:07:18
合計ジャッジ時間 15,843 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 52 ms
52,480 KB
testcase_01 AC 56 ms
52,480 KB
testcase_02 AC 50 ms
52,480 KB
testcase_03 WA -
testcase_04 AC 51 ms
51,968 KB
testcase_05 WA -
testcase_06 WA -
testcase_07 AC 178 ms
83,840 KB
testcase_08 AC 212 ms
86,784 KB
testcase_09 AC 326 ms
99,456 KB
testcase_10 AC 516 ms
112,380 KB
testcase_11 AC 370 ms
101,504 KB
testcase_12 AC 185 ms
85,632 KB
testcase_13 AC 210 ms
86,784 KB
testcase_14 AC 192 ms
85,504 KB
testcase_15 AC 129 ms
77,568 KB
testcase_16 AC 202 ms
86,912 KB
testcase_17 AC 614 ms
116,924 KB
testcase_18 AC 607 ms
117,116 KB
testcase_19 AC 605 ms
116,792 KB
testcase_20 AC 598 ms
117,184 KB
testcase_21 AC 607 ms
116,516 KB
testcase_22 AC 601 ms
116,772 KB
testcase_23 AC 605 ms
116,664 KB
testcase_24 AC 621 ms
116,376 KB
testcase_25 AC 611 ms
116,660 KB
testcase_26 AC 617 ms
116,516 KB
testcase_27 WA -
testcase_28 WA -
testcase_29 WA -
testcase_30 WA -
testcase_31 WA -
testcase_32 AC 240 ms
98,188 KB
testcase_33 AC 238 ms
98,280 KB
testcase_34 AC 241 ms
97,920 KB
testcase_35 AC 235 ms
98,176 KB
testcase_36 AC 242 ms
97,536 KB
testcase_37 AC 88 ms
75,648 KB
testcase_38 AC 478 ms
94,848 KB
testcase_39 AC 520 ms
123,952 KB
testcase_40 AC 49 ms
52,480 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