結果
問題 | No.1607 Kth Maximum Card |
ユーザー |
👑 ![]() |
提出日時 | 2021-07-16 22:25:49 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 409 ms / 3,500 ms |
コード長 | 1,204 bytes |
コンパイル時間 | 893 ms |
コンパイル使用メモリ | 82,524 KB |
最終ジャッジ日時 | 2025-01-23 02:17:00 |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 33 |
ソースコード
// Nachia くんだよ#include <iostream>#include <vector>#include <deque>using namespace std;using ll = long long;using ull = unsigned long long;#define rep(i,n) for(int i=0; i<(n); i++)struct Edge{ int v,c; };int N,M,K;vector<vector<Edge>> E;bool solve(int v){vector<int> D(N,1001001);vector<int> F(N,0);D[0] = 0;deque<int> I;I.push_back(0);while(I.size()){int p = I.back(); I.pop_back();if(F[p]) continue;F[p] = 1;for(auto e : E[p]){if(e.c <= v){if(D[e.v] <= D[p]) continue;D[e.v] = D[p];I.push_back(e.v);}else{if(D[e.v] <= D[p] + 1) continue;D[e.v] = D[p] + 1;I.push_front(e.v);}}}return D[N-1] < K;}int main() {cin >> N >> M >> K;E.resize(N);rep(i,M){int u,v,c; cin >> u >> v >> c; u--; v--;E[u].push_back({v,c});E[v].push_back({u,c});}int l=-1, r=200001;while(r-l > 1){int m = (l+r+2) / 2-1;if(solve(m)) r = m;else l = m;}cout << r << "\n";return 0;}struct ios_do_not_sync{ios_do_not_sync(){ios::sync_with_stdio(false);cin.tie(nullptr);}} ios_do_not_sync_instance;