結果
| 問題 |
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)