結果
| 問題 | No.3561 Collect KCPC |
| コンテスト | |
| ユーザー |
kidodesu
|
| 提出日時 | 2026-05-29 19:55:00 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,144 bytes |
| 記録 | |
| コンパイル時間 | 233 ms |
| コンパイル使用メモリ | 85,640 KB |
| 実行使用メモリ | 153,220 KB |
| 最終ジャッジ日時 | 2026-05-29 19:55:20 |
| 合計ジャッジ時間 | 18,347 ms |
|
ジャッジサーバーID (参考情報) |
judge4_1 / judge3_0 |
(要ログイン)
| サブタスク | 配点 | 結果 |
|---|---|---|
| 部分点1 | 10 % | AC * 9 WA * 6 |
| 部分点2 | 20 % | AC * 8 WA * 7 |
| 部分点3 | 20 % | AC * 13 |
| 部分点4 | 50 % | AC * 30 WA * 21 |
| 合計 | 20 点 |
ソースコード
from heapq import *
def main():
n, m = list(map(int, input().split()))
node = [[] for _ in range(n)]
for _ in range(m):
u, v, w = list(map(int, input().split()))
node[u-1].append((v-1, w))
S = input()
inf = 1 << 60
dp = [[inf for _ in range(6)] for _ in range(n)]
ep = [[-1 for _ in range(6)] for _ in range(n)]
dp[0][0] = 0
hq = []
heappush(hq, (0, 0, 0))
while hq:
c, now, f = heappop(hq)
if dp[now][f] < c: continue
if f == 0:
if S[now] == "K" and dp[now][1] > c:
heappush(hq, (c, now, 1))
elif f == 1:
if S[now] == "C":
if dp[now][2] > c:
if ep[now][2] != -1 and ep[now][2] != now:
ep[now][3] = ep[now][2]
dp[now][3] = dp[now][2]
heappush(hq, (dp[now][3], now, 3))
ep[now][2] = now
dp[now][2] = c
heappush(hq, (dp[now][2], now, 2))
elif dp[now][3] > c and ep[now][2] != now:
ep[now][3] = now
dp[now][3] = c
heappush(hq, (dp[now][3], now, 3))
elif f == 2 or f == 3:
if S[now] == "P":
pre = ep[now][f]
if dp[now][4] > c:
if ep[now][4] != -1 and ep[now][4] != pre:
ep[now][5] = ep[now][4]
dp[now][5] = dp[now][4]
heappush(hq, (dp[now][5], now, 5))
ep[now][4] = pre
dp[now][4] = c
heappush(hq, (dp[now][4], now, 4))
elif dp[now][5] > c and ep[now][4] != pre:
ep[now][5] = pre
dp[now][5] = c
heappush(hq, (dp[now][5], now, 5))
else:
if S[now] == "C" and ep[now][f] != now:
return c
for nxt, w in node[now]:
if dp[nxt][f] > c+w:
dp[nxt][f] = c+w
heappush(hq, (c+w, nxt, f))
return -1
print(main())
kidodesu