結果
問題 | No.1607 Kth Maximum Card |
ユーザー |
|
提出日時 | 2021-10-04 09:38:55 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 2,564 ms / 3,500 ms |
コード長 | 1,250 bytes |
コンパイル時間 | 294 ms |
コンパイル使用メモリ | 82,336 KB |
実行使用メモリ | 301,580 KB |
最終ジャッジ日時 | 2024-07-22 09:01:44 |
合計ジャッジ時間 | 30,007 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 33 |
ソースコード
def binary_search_int(ok,ng,test):""":param ok: solve(x) = True を必ず満たす点:param ng: solve(x) = False を必ず満たす点"""while abs(ok-ng)>1:mid=(ok+ng)//2if test(mid):ok=midelse:ng=midreturn ok##############################################################import sysinput = sys.stdin.readlineINF = 10**18 # 大きい数字N, M, K = map(int, input().split())edges=[[] for _ in range(N)]for _ in range(M):x, y, cost = map(int, input().split())x-=1y-=1edges[x].append((y,cost))edges[y].append((x,cost))def test(k):next_set=[[] for _ in range(N)]next_set[0]=[0]dist=[INF]*(N+1)for time in range(N):while next_set[time]:p = next_set[time].pop()if dist[p]<time: continuefor q,d in edges[p]:if d>k:cost=1else:cost=0if dist[q]<=time+cost:continuedist[q]=time+costif q!=N-1:next_set[time+cost].append(q)return dist[N-1]<=K-1kmin=binary_search_int(10**6,-1,test)print(kmin)