結果

問題 No.1479 Matrix Eraser
ユーザー shotoyooshotoyoo
提出日時 2021-05-25 01:39:30
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,968 bytes
コンパイル時間 442 ms
コンパイル使用メモリ 81,792 KB
実行使用メモリ 123,808 KB
最終ジャッジ日時 2024-04-21 11:08:48
合計ジャッジ時間 11,604 ms
ジャッジサーバーID
(参考情報)
judge5 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 38 ms
51,840 KB
testcase_01 AC 38 ms
52,480 KB
testcase_02 AC 37 ms
52,480 KB
testcase_03 WA -
testcase_04 AC 37 ms
52,224 KB
testcase_05 WA -
testcase_06 WA -
testcase_07 AC 139 ms
83,840 KB
testcase_08 AC 174 ms
87,040 KB
testcase_09 AC 258 ms
99,200 KB
testcase_10 AC 395 ms
111,740 KB
testcase_11 AC 286 ms
101,248 KB
testcase_12 AC 153 ms
85,376 KB
testcase_13 AC 170 ms
86,912 KB
testcase_14 AC 157 ms
86,016 KB
testcase_15 AC 103 ms
77,568 KB
testcase_16 AC 163 ms
87,040 KB
testcase_17 AC 467 ms
116,784 KB
testcase_18 AC 463 ms
117,036 KB
testcase_19 AC 459 ms
116,792 KB
testcase_20 AC 459 ms
116,812 KB
testcase_21 AC 465 ms
116,532 KB
testcase_22 AC 471 ms
116,940 KB
testcase_23 AC 473 ms
116,776 KB
testcase_24 AC 468 ms
116,664 KB
testcase_25 AC 464 ms
116,784 KB
testcase_26 AC 463 ms
116,392 KB
testcase_27 WA -
testcase_28 WA -
testcase_29 WA -
testcase_30 WA -
testcase_31 WA -
testcase_32 AC 181 ms
97,792 KB
testcase_33 AC 177 ms
98,048 KB
testcase_34 AC 178 ms
98,048 KB
testcase_35 AC 173 ms
97,920 KB
testcase_36 AC 182 ms
98,048 KB
testcase_37 AC 75 ms
76,032 KB
testcase_38 AC 375 ms
96,512 KB
testcase_39 AC 429 ms
123,808 KB
testcase_40 AC 40 ms
52,224 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 = set()
        rr = set()
        while q:
            u = q.pop()
            if d[u]==1:
                l.append(u)
            if u<h:
                ll.add(u)
            else:
                rr.add(u)
            for v in ns[u]:
                if v in done:
                    continue
                done.add(v)
                q.append(v)
        if not l:
            ans += min(len(ll), len(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