結果

問題 No.1479 Matrix Eraser
ユーザー shotoyooshotoyoo
提出日時 2021-05-25 01:39:30
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,968 bytes
コンパイル時間 218 ms
コンパイル使用メモリ 82,200 KB
実行使用メモリ 123,824 KB
最終ジャッジ日時 2024-10-13 09:49:44
合計ジャッジ時間 11,174 ms
ジャッジサーバーID
(参考情報)
judge4 / judge5
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 37 ms
53,480 KB
testcase_01 AC 36 ms
54,200 KB
testcase_02 AC 36 ms
53,412 KB
testcase_03 WA -
testcase_04 AC 39 ms
53,784 KB
testcase_05 WA -
testcase_06 WA -
testcase_07 AC 127 ms
83,836 KB
testcase_08 AC 160 ms
87,092 KB
testcase_09 AC 251 ms
99,156 KB
testcase_10 AC 385 ms
112,152 KB
testcase_11 AC 269 ms
101,500 KB
testcase_12 AC 139 ms
85,156 KB
testcase_13 AC 157 ms
87,168 KB
testcase_14 AC 138 ms
85,752 KB
testcase_15 AC 87 ms
77,580 KB
testcase_16 AC 150 ms
87,144 KB
testcase_17 AC 460 ms
116,556 KB
testcase_18 AC 452 ms
116,876 KB
testcase_19 AC 448 ms
116,812 KB
testcase_20 AC 451 ms
116,816 KB
testcase_21 AC 461 ms
116,752 KB
testcase_22 AC 459 ms
117,188 KB
testcase_23 AC 463 ms
116,696 KB
testcase_24 AC 462 ms
116,700 KB
testcase_25 AC 453 ms
116,772 KB
testcase_26 AC 464 ms
116,488 KB
testcase_27 WA -
testcase_28 WA -
testcase_29 WA -
testcase_30 WA -
testcase_31 WA -
testcase_32 AC 160 ms
97,828 KB
testcase_33 AC 162 ms
97,952 KB
testcase_34 AC 161 ms
97,624 KB
testcase_35 AC 163 ms
97,676 KB
testcase_36 AC 168 ms
97,792 KB
testcase_37 AC 65 ms
76,556 KB
testcase_38 AC 365 ms
96,584 KB
testcase_39 AC 411 ms
123,824 KB
testcase_40 AC 36 ms
52,824 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