| 17297 | 2025-06-19 18:19:43 | 42 | Pontok és Négyzetek | pypy3 | Elfogadva 100/100 | 331ms | 72164 KiB |
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
dp = [[[[0 for _ in range(2)] for _ in range(2)] for _ in range(445)] for _ in range(445)]
rep_ = list(range(445))
siz_ = [1]*445
is_path = [False]*445
sides = [0]*445
def fint(v):
if rep_[v] == v:
return v
rep_[v] = fint(rep_[v])
return rep_[v]
def onion(a, b):
a = fint(a)
b = fint(b)
if a == b:
return
siz_[b] += siz_[a]
rep_[a] = b
is_path[b] = is_path[b] or is_path[a]
for i in range(n * m):
rep_[i] = i
siz_[i] = 1
# vízszintes élek
for i in range(n + 1):
line = input().strip()
for j in range(m):
z = line[j]
if z == '1':
if i != n:
sides[i * m + j] += 1
if i != 0:
sides[(i - 1) * m + j] += 1
else:
if 0 < i < n:
onion(i * m + j, (i - 1) * m + j)
if i == 0:
is_path[fint(i * m + j)] = True
if i == n:
is_path[fint((i - 1) * m + j)] = True
# függőleges élek
for i in range(n):
line = input().strip()
for j in range(m + 1):
z = line[j]
if z == '1':
if j != m:
sides[i * m + j] += 1
if j != 0:
sides[i * m + j - 1] += 1
else:
if 0 < j < m:
onion(i * m + j, i * m + j - 1)
if j == 0:
is_path[fint(i * m + j)] = True
if j == m:
is_path[fint(i * m + j - 1)] = True
paths = []
cycles = []
for i in range(n * m):
r = fint(i)
if r == i and sides[i] != 4:
if is_path[i]:
paths.append(siz_[i])
else:
cycles.append(siz_[i])
paths.sort()
cycles.sort()
ps = len(paths)
cs = len(cycles)
for p in reversed(range(ps + 1)):
for c in reversed(range(cs + 1)):
if p == ps and c == cs:
continue
dp[p][c][0][0] = -int(1e5)
dp[p][c][0][1] = -int(1e5)
dp[p][c][1][0] = int(1e5)
dp[p][c][1][1] = int(1e5)
if p < ps:
if p == ps - 1 and c == cs:
dp[p][c][0][0] = paths[p]
if p + 1 < ps:
dp[p][c][0][0] = max(dp[p][c][0][0], dp[p + 1][c][1][0] + paths[p])
if c < cs:
dp[p][c][0][0] = max(dp[p][c][0][0], dp[p + 1][c][1][1] + paths[p])
if paths[p] > 2:
w2 = int(1e5)
if p + 1 < ps:
w2 = min(w2, dp[p + 1][c][0][0])
if c < cs:
w2 = min(w2, dp[p + 1][c][0][1])
if w2 != int(1e5):
dp[p][c][0][0] = max(dp[p][c][0][0], w2 + paths[p] - 4)
# 1 0
if p == ps - 1 and c == cs:
dp[p][c][1][0] = -paths[p]
if p + 1 < ps:
dp[p][c][1][0] = min(dp[p][c][1][0], dp[p + 1][c][0][0] - paths[p])
if c < cs:
dp[p][c][1][0] = min(dp[p][c][1][0], dp[p + 1][c][0][1] - paths[p])
if paths[p] > 2:
w2 = -int(1e5)
if p + 1 < ps:
w2 = max(w2, dp[p + 1][c][1][0])
if c < cs:
w2 = max(w2, dp[p + 1][c][1][1])
if w2 != -int(1e5):
dp[p][c][1][0] = min(dp[p][c][1][0], w2 - paths[p] + 4)
if c < cs:
if c == cs - 1 and p == ps:
dp[p][c][0][1] = cycles[c]
if p < ps:
dp[p][c][0][1] = max(dp[p][c][0][1], dp[p][c + 1][1][0] + cycles[c])
if c + 1 < cs:
dp[p][c][0][1] = max(dp[p][c][0][1], dp[p][c + 1][1][1] + cycles[c])
w2 = int(2e5)
if p < ps:
w2 = min(w2, dp[p][c + 1][0][0])
if c + 1 < cs:
w2 = min(w2, dp[p][c + 1][0][1])
if w2 != int(2e5):
dp[p][c][0][1] = max(dp[p][c][0][1], w2 + cycles[c] - 8)
if c == cs - 1 and p == ps:
dp[p][c][1][1] = -cycles[c]
if p < ps:
dp[p][c][1][1] = min(dp[p][c][1][1], dp[p][c + 1][0][0] - cycles[c])
if c + 1 < cs:
dp[p][c][1][1] = min(dp[p][c][1][1], dp[p][c + 1][0][1] - cycles[c])
w2 = -int(2e5)
if p < ps:
w2 = max(w2, dp[p][c + 1][1][0])
if c + 1 < cs:
w2 = max(w2, dp[p][c + 1][1][1])
if w2 != -int(2e5):
dp[p][c][1][1] = min(dp[p][c][1][1], w2 - cycles[c] + 8)
if ps == 0 and cs == 0:
print(0)
else:
res = max(dp[0][0][1][0] if ps != 0 else -int(2e5),
dp[0][0][1][1] if cs != 0 else -int(2e5))
print(res)
| Részfeladat | Összpont | Teszt | Verdikt | Idő | Memória | ||
|---|---|---|---|---|---|---|---|
| subtask1 | 20/20 | ||||||
| 1 | Elfogadva | 250ms | 70332 KiB | ||||
| 2 | Elfogadva | 248ms | 70244 KiB | ||||
| 3 | Elfogadva | 287ms | 70328 KiB | ||||
| 4 | Elfogadva | 284ms | 70340 KiB | ||||
| 5 | Elfogadva | 248ms | 70128 KiB | ||||
| 6 | Elfogadva | 246ms | 70332 KiB | ||||
| 7 | Elfogadva | 282ms | 70128 KiB | ||||
| 8 | Elfogadva | 280ms | 70292 KiB | ||||
| 9 | Elfogadva | 245ms | 70120 KiB | ||||
| 10 | Elfogadva | 245ms | 70120 KiB | ||||
| 11 | Elfogadva | 284ms | 70316 KiB | ||||
| 12 | Elfogadva | 282ms | 70416 KiB | ||||
| subtask2 | 20/20 | ||||||
| 1 | Elfogadva | 246ms | 70184 KiB | ||||
| 2 | Elfogadva | 247ms | 70528 KiB | ||||
| 3 | Elfogadva | 282ms | 70304 KiB | ||||
| 4 | Elfogadva | 284ms | 70172 KiB | ||||
| 5 | Elfogadva | 257ms | 70304 KiB | ||||
| 6 | Elfogadva | 259ms | 70236 KiB | ||||
| 7 | Elfogadva | 272ms | 70348 KiB | ||||
| 8 | Elfogadva | 254ms | 70164 KiB | ||||
| 9 | Elfogadva | 250ms | 70328 KiB | ||||
| 10 | Elfogadva | 277ms | 70108 KiB | ||||
| 11 | Elfogadva | 270ms | 70336 KiB | ||||
| 12 | Elfogadva | 250ms | 70212 KiB | ||||
| subtask3 | 20/20 | ||||||
| 1 | Elfogadva | 280ms | 70340 KiB | ||||
| 2 | Elfogadva | 246ms | 70120 KiB | ||||
| 3 | Elfogadva | 246ms | 70092 KiB | ||||
| 4 | Elfogadva | 282ms | 70156 KiB | ||||
| 5 | Elfogadva | 246ms | 70328 KiB | ||||
| 6 | Elfogadva | 246ms | 70304 KiB | ||||
| 7 | Elfogadva | 280ms | 70328 KiB | ||||
| 8 | Elfogadva | 280ms | 70320 KiB | ||||
| 9 | Elfogadva | 246ms | 70120 KiB | ||||
| 10 | Elfogadva | 246ms | 70120 KiB | ||||
| 11 | Elfogadva | 291ms | 70216 KiB | ||||
| 12 | Elfogadva | 282ms | 70224 KiB | ||||
| 13 | Elfogadva | 246ms | 70120 KiB | ||||
| 14 | Elfogadva | 245ms | 70116 KiB | ||||
| 15 | Elfogadva | 286ms | 70120 KiB | ||||
| 16 | Elfogadva | 280ms | 70340 KiB | ||||
| 17 | Elfogadva | 247ms | 70120 KiB | ||||
| 18 | Elfogadva | 248ms | 70120 KiB | ||||
| 19 | Elfogadva | 286ms | 70176 KiB | ||||
| 20 | Elfogadva | 287ms | 70260 KiB | ||||
| 21 | Elfogadva | 246ms | 70216 KiB | ||||
| 22 | Elfogadva | 246ms | 70120 KiB | ||||
| 23 | Elfogadva | 286ms | 70160 KiB | ||||
| 24 | Elfogadva | 284ms | 70072 KiB | ||||
| 25 | Elfogadva | 246ms | 70120 KiB | ||||
| 26 | Elfogadva | 246ms | 70120 KiB | ||||
| subtask4 | 20/20 | ||||||
| 1 | Elfogadva | 282ms | 70328 KiB | ||||
| 2 | Elfogadva | 250ms | 70100 KiB | ||||
| 3 | Elfogadva | 246ms | 70132 KiB | ||||
| 4 | Elfogadva | 282ms | 70216 KiB | ||||
| 5 | Elfogadva | 246ms | 70100 KiB | ||||
| 6 | Elfogadva | 244ms | 70116 KiB | ||||
| 7 | Elfogadva | 284ms | 70348 KiB | ||||
| 8 | Elfogadva | 282ms | 70148 KiB | ||||
| 9 | Elfogadva | 245ms | 70292 KiB | ||||
| 10 | Elfogadva | 246ms | 70080 KiB | ||||
| 11 | Elfogadva | 284ms | 70192 KiB | ||||
| 12 | Elfogadva | 284ms | 70328 KiB | ||||
| 13 | Elfogadva | 246ms | 70116 KiB | ||||
| 14 | Elfogadva | 244ms | 70120 KiB | ||||
| 15 | Elfogadva | 250ms | 70236 KiB | ||||
| subtask5 | 20/20 | ||||||
| 1 | Elfogadva | 300ms | 70776 KiB | ||||
| 2 | Elfogadva | 314ms | 70708 KiB | ||||
| 3 | Elfogadva | 266ms | 70556 KiB | ||||
| 4 | Elfogadva | 266ms | 70560 KiB | ||||
| 5 | Elfogadva | 294ms | 71196 KiB | ||||
| 6 | Elfogadva | 270ms | 70632 KiB | ||||
| 7 | Elfogadva | 305ms | 70636 KiB | ||||
| 8 | Elfogadva | 331ms | 71900 KiB | ||||
| 9 | Elfogadva | 263ms | 70632 KiB | ||||
| 10 | Elfogadva | 293ms | 71760 KiB | ||||
| 11 | Elfogadva | 301ms | 70632 KiB | ||||
| 12 | Elfogadva | 305ms | 70632 KiB | ||||
| 13 | Elfogadva | 261ms | 70632 KiB | ||||
| 14 | Elfogadva | 263ms | 70632 KiB | ||||
| 15 | Elfogadva | 296ms | 70752 KiB | ||||
| 16 | Elfogadva | 328ms | 72056 KiB | ||||
| 17 | Elfogadva | 289ms | 72164 KiB | ||||
| 18 | Elfogadva | 264ms | 70632 KiB | ||||