結果
問題 |
No.2291 Union Find Estimate
|
ユーザー |
|
提出日時 | 2025-04-15 09:29:56 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,411 bytes |
コンパイル時間 | 316 ms |
コンパイル使用メモリ | 82,652 KB |
実行使用メモリ | 108,104 KB |
最終ジャッジ日時 | 2025-04-15 09:30:02 |
合計ジャッジ時間 | 5,329 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 17 WA * 1 |
ソースコード
import sys sys.setrecursionlimit(10**6) MOD = 998244353 Num = [str(i) for i in range(10)] W,H = map(int,input().split()) A = [-1]*(W+1) T = [[i,1] for i in range(W+1)] def find(x): if T[x][0]==x:return x return find(T[x][0]) def union(x,y): rx = find(x) ry = find(y) if rx==ry:return if T[rx][1]>T[ry][1]: T[ry][0] = rx elif T[rx][1]<T[ry][1]: T[rx][0] = ry else: T[ry][0] = rx T[rx][1] += T[ry][1] ans = 1 for _ in range(H): Q = "-"+input().strip() C = {} for i in range(1,W+1): if Q[i] in Num: ri = find(i) if A[ri]==-1: A[ri] = int(Q[i]) else: if A[ri]!=int(Q[i]): ans = 0 elif Q[i]!="?": if Q[i] not in C: C[Q[i]] = [] C[Q[i]].append(i) for a in C: i = C[a][0] ri = find(i) for j in C[a][1:]: rj = find(j) if A[ri]<0 and A[rj]>=0: A[ri] = A[rj] elif A[ri]>=0 and A[rj]<0: A[rj] = A[ri] elif A[ri]!=A[rj]: ans = 0 union(ri,rj) flag = [0]*(W+1) if ans>0: ans = 1 for i in range(1,W+1): ri = find(i) if A[ri]<0 and flag[ri]==0: ans = (ans*10)%MOD flag[ri] = 1 print(ans)