結果
| 問題 | No.2573 moving up |
| コンテスト | |
| ユーザー |
detteiuu
|
| 提出日時 | 2026-10-20 20:39:55 |
| 言語 | PyPy3 (8.0.0 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 88 ms / 2,000 ms |
| + 227µs | |
| コード長 | 1,405 bytes |
| 記録 | |
| コンパイル時間 | 83 ms |
| コンパイル使用メモリ | 64,536 KB |
| 実行使用メモリ | 59,096 KB |
| 最終ジャッジ日時 | 2026-10-20 20:40:12 |
| 合計ジャッジ時間 | 4,436 ms |
|
ジャッジサーバーID (参考情報) |
judge6_0 / judge4_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 32 |
ソースコード
from sys import stdin
input = stdin.readline
def Hungarian(A):
N = len(A)
M = len(A[0])
U = [0]*N
V = [0]*M
P = [0]*M
way = [0]*M
for i in range(1, N):
P[0] = i
minV = [INF]*M
used = [False]*M
j0 = 0
while P[j0] != 0:
i0 = P[j0]
j1 = 0
used[j0] = True
delta = INF
for j in range(1, M):
if used[j]: continue
curr = A[i0][j]-U[i0]-V[j]
if curr < minV[j]:
minV[j] = curr
way[j] = j0
if minV[j] < delta:
delta = minV[j]
j1 = j
for j in range(M):
if used[j]:
U[P[j]] += delta
V[j] -= delta
else:
minV[j] -= delta
j0 = j1
while True:
P[j0] = P[way[j0]]
j0 = way[j0]
if j0 == 0: break
return -V[0]
INF = 1<<60
H, W = map(int, input().split())
XY = [list(map(int, input().split())) for _ in range(W)]
A = [[0]*(W+1) for _ in range(W+1)]
for i in range(W):
for j, (h, w) in enumerate(XY):
h, w = h-1, w-1
cost = h
if i < w-h:
cost += (w-h)-i
if w < i:
cost += i-w
A[i+1][j+1] = cost
print(Hungarian(A))
detteiuu