結果
| 問題 |
No.179 塗り分け
|
| ユーザー |
👑 SPD_9X2
|
| 提出日時 | 2025-07-13 17:29:41 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 1,979 ms / 3,000 ms |
| コード長 | 2,315 bytes |
| コンパイル時間 | 404 ms |
| コンパイル使用メモリ | 82,176 KB |
| 実行使用メモリ | 93,284 KB |
| 最終ジャッジ日時 | 2025-07-13 17:30:06 |
| 合計ジャッジ時間 | 23,545 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 6 |
| other | AC * 40 |
ソースコード
"""
https://yukicoder.me/problems/no/179
ずらし方全探索
"""
class DSU():
def __init__(self, n:int):
self.n = n
self.p = [i for i in range(n)]
self.rank = [i for i in range(n)]
self.sizelis = [1] * n
def leader(self,a):
stk = []
while self.p[a] != a:
stk.append(a)
a = self.p[a]
for v in stk:
self.p[v] = a
return a
def merge(self, a, b):
ap = self.leader(a)
bp = self.leader(b)
if ap == bp:
return ap
if self.rank[ap] > self.rank[bp]:
self.p[bp] = ap
self.sizelis[ap] += self.sizelis[bp]
elif self.rank[ap] < self.rank[bp]:
self.p[ap] = bp
self.sizelis[bp] += self.sizelis[ap]
else:
self.p[bp] = ap
self.sizelis[ap] += self.sizelis[bp]
self.rank[ap] += 1
return self.p[ap]
def same(self,a,b):
return self.leader(a) == self.leader(b)
def size(self,a):
return self.sizelis[ self.leader(a) ]
def groups(self):
dic = {}
for v in range(self.n):
vp = self.leader(v)
if vp not in dic:
dic[vp] = [v]
else:
dic[vp].append(v)
return list(dic.values())
import sys
def check(dx,dy):
uf = DSU(H*W)
for i in range(H):
for j in range(W):
if S[i][j] == ".":
continue
cnt = 0
if 0 <= i+dx < H and 0 <= j+dy < W and S[i+dx][j+dy] == "#":
uf.merge( i*W+j , (i+dx)*W+j+dy )
if 0 <= i-dx < H and 0 <= j-dy < W and S[i-dx][j-dy] == "#":
uf.merge( i*W+j , (i-dx)*W+j-dy )
for i in range(H):
for j in range(W):
if S[i][j] == "#" and uf.size(i*W+j)%2==1:
return False
return True
H,W = map(int,input().split())
S = [ input() for i in range(H) ]
cnt = 0
for i in range(H):
for j in range(W):
if S[i][j] == "#":
cnt += 1
if cnt == 0:
print ("NO")
sys.exit()
for dx in range(-50,51):
for dy in range(-50,51):
if check(dx,dy):
print ("YES")
sys.exit()
print ("NO")
SPD_9X2