結果
問題 |
No.3013 ハチマキ買い星人
|
ユーザー |
![]() |
提出日時 | 2025-01-23 23:59:52 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
TLE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 1,253 bytes |
コンパイル時間 | 3,987 ms |
コンパイル使用メモリ | 184,200 KB |
実行使用メモリ | 28,968 KB |
最終ジャッジ日時 | 2025-01-25 22:02:34 |
合計ジャッジ時間 | 9,882 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge10 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 42 TLE * 3 |
ソースコード
//嘘ダイクストラ #include <iostream> #include <algorithm> #include <atcoder/all> using namespace std; using namespace atcoder; using ll = long long; const ll INF = 2000000000000000000; ll N, M, P, Y; //dijkstra struct edge{ ll pre, to; ll cost; ll idx; }; vector<vector<edge>> G; vector<ll> dijkstra(int start = 0) { int N = G.size(); vector<ll> dist(N, INF); using classPQ = tuple<ll, ll, ll>; priority_queue<classPQ, vector<classPQ>, greater<classPQ>> que; que.emplace(0, start, 0); dist[start] = 0; while(!que.empty()){ auto [d, c, p] = que.top(); que.pop(); if(dist[c] != d) continue; for(auto& e : G[c]){ //=を含むとTLEする if(d + e.cost <= dist[e.to]){ dist[e.to] = d + e.cost; que.emplace(dist[e.to], e.to, e.idx); } } } return dist; } int main(){ cin >> N >> M >> P >> Y; G.resize(N + 1); for(int i = 1; i <= M; i++){ ll a, b, c; cin >> a >> b >> c; G[a].push_back(edge{a, b, c, i}); G[b].push_back(edge{b, a, c, i}); } auto dist = dijkstra(1); ll ans = 0; for(int i = 1; i <= P; i++){ ll d, e; cin >> d >> e; if(dist[d] <= Y) ans = max(ans, (Y - dist[d]) / e); } cout << ans << endl; return 0; }