結果
問題 | No.1605 Matrix Shape |
ユーザー |
|
提出日時 | 2021-07-17 00:32:28 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 352 ms / 2,000 ms |
コード長 | 1,876 bytes |
コンパイル時間 | 166 ms |
コンパイル使用メモリ | 82,056 KB |
実行使用メモリ | 203,524 KB |
最終ジャッジ日時 | 2024-07-06 12:05:10 |
合計ジャッジ時間 | 6,636 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 34 |
ソースコード
import sysinput = 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))n = int(input())hw = []m = 0for _ in range(n):h,w = list(map(int, input().split()))hw.append((h,w))m = max(m, h, w)ns = [[] for _ in range(m)]rns = [[] for _ in range(m)]u = 0for h,w in hw:ns[h-1].append(w-1)rns[w-1].append(h-1)# ns[u].append(n+w-1)# ns[n+h-1].append(u)# rns[n+w-1].append(u)# rns[u].append(n+h-1)u += 1v0 = v1 = 0start = Noneend = Nonefor u in range(m):if len(ns[u])==len(rns[u]):passelif len(ns[u])+1 == len(rns[u]):v0 += 1end = uelif len(rns[u])+1 == len(ns[u]):v1 += 1start = uelse:v0 = v1 = 100breakdef euler_d(ns, start=0):"""有向グラフのオイラー閉路パスの場合はstartを奇数次数頂点にする"""n = len(ns)p = []q = [start]r = []vs = [0]*nwhile q:u = q.pop()u0 = uwhile vs[u]<len(ns[u]):v = ns[u][vs[u]]vs[u] += 1u = vr.append(v)while r:q.append(r.pop())p.append(u0)return pif v0==v1==0:# ひとつかどうか判定for start in range(len(ns)):if ns[start]:breakres = euler_d(ns, start)if len(res)==n+1:s = set()l = res[:-1]for i in range(len(l)):h0 = l[i]w1 = l[i-1]s.add((h0))ans = len(s)else:ans = 0elif v0==v1==1:ns[end].append(start)res = euler_d(ns, start)if len(res)==n+2:ans = 1else:ans = 0else:ans = 0print(ans)