結果
| 問題 |
No.1545 [Cherry 2nd Tune N] Anthem
|
| コンテスト | |
| ユーザー |
ygd.
|
| 提出日時 | 2021-06-15 23:07:21 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,097 bytes |
| コンパイル時間 | 227 ms |
| コンパイル使用メモリ | 82,524 KB |
| 実行使用メモリ | 238,828 KB |
| 最終ジャッジ日時 | 2024-12-28 02:12:18 |
| 合計ジャッジ時間 | 28,383 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 65 WA * 1 TLE * 1 |
ソースコード
from heapq import heapify, heappop, heappush
from math import inf
def main():
N,S,T,K = map(int,input().split()); INF = float("inf")
S-=1;T-=1 #0-index
X = list(map(int,input().split()))
G = [[] for _ in range(N)]
M = int(input())
for _ in range(M):
A,B,Y = map(int,input().split())
A-=1;B-=1
G[A].append((Y,B))
def dijkstra_heap2(s,G,t,K):
INF = float("inf")
#S:start, V: node, E: Edge, G: Graph
V = len(G)
#dp[i][j]: i番目の歌を歌って今j曲目(i番目の歌を含む)
if K <= 10:
MAX = 20
elif K <= 130:
MAX = 1000
else:
MAX = pow(10,5)
dp = [[INF]*MAX for _ in range(V)]
#d = [INF for _ in range(V)]
dp[s][1] = X[s]
prev = [[-1]*MAX for _ in range(V)]
PQ = []
heappush(PQ,(X[s],s,1)) #時間, 位置, 何曲目
while PQ:
c,v,n = heappop(PQ)
if v == t and n >= K:
break
if dp[v][n] < c:
continue
dp[v][n] = c
if n+1 >= MAX: #これ以上は配列外参照
continue
for cost,u in G[v]:
if dp[u][n+1] <= cost + X[u] + dp[v][n]:
continue
dp[u][n+1] = cost + X[u] + dp[v][n]
prev[u][n+1] = v
heappush(PQ,(dp[u][n+1], u, n+1))
return dp, prev
d, keiro = dijkstra_heap2(S,G,T,K)
#print(d)
#print(keiro)
ans = INF
num = INF #何曲か
for i in range(K,len(d[T])):
if d[T][i] < ans:
ans = d[T][i]
num = i
if ans == INF:
print("Impossible")
else:
print("Possible")
print(ans)
print(num)
ret = [T+1] #1-index
#num -= 1
now = T
while num > 1:
pre = keiro[now][num]
ret.append(pre+1) #1-index
now = pre
num -= 1
ret.reverse()
print(*ret)
if __name__ == '__main__':
main()
ygd.