結果
問題 | No.3013 ハチマキ買い星人 |
ユーザー |
|
提出日時 | 2025-01-25 20:55:32 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 453 ms / 2,000 ms |
コード長 | 2,556 bytes |
コンパイル時間 | 4,968 ms |
コンパイル使用メモリ | 285,632 KB |
実行使用メモリ | 22,508 KB |
最終ジャッジ日時 | 2025-01-26 00:08:45 |
合計ジャッジ時間 | 17,158 ms |
ジャッジサーバーID (参考情報) |
judge7 / judge12 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 45 |
ソースコード
//#pragma GCC optimize("Ofast") //#pragma GCC optimize "O3,omit-frame-pointer,inline" #include <iostream> // cout, endl, cin #include <string> // string, to_string, stoi #include <vector> // vector #include <algorithm> // min, max, swap, sort, reverse, lower_bound, upper_bound #include <utility> // pair, make_pair #include <tuple> // tuple, make_tuple #include <cstdint> // int64_t, int*_t #include <cstdio> // printf #include <map> // map #include <queue> // queue, priority_queue #include <set> // set #include <stack> // stack #include <deque> // deque #include <unordered_map> // unordered_map #include <unordered_set> // unordered_set #include <bitset> // bitset #include <cctype> // isupper, islower, isdigit, toupper, tolower #include <iomanip>//fixed,setprecision #include <limits.h>//INT_MAX #include <math.h>//M_PI #include <random> #include <regex> // 正規表現 #include <time.h> #include <fstream> #include <array> #include <bit> #include <chrono> #include <span> #include <cmath> #include <complex>//複素数 //#include <bits/stdc++.h> using namespace std; #include <atcoder/all> using namespace atcoder; using mint = modint998244353; using ll = long long; using ull = unsigned long long; #define rep(i, n) for (ll i = 0; i < (ll)(n); i++) const int dx[4] = {0, 1, 0, -1}; const int dy[4] = {1, 0, -1, 0}; random_device rnd; mt19937 mt_gen(rnd()); int RandInt(int a, int b) { return a + mt_gen() % (b - a + 1); } struct edge{ ll to,cost; }; ll n,m,p,y; vector<edge>to[202020]; ll ans_cnt=0; ll goal=-1; void dijkstra(ll s, vector<ll>&d){ priority_queue<pair<ll,ll>,vector<pair<ll,ll>>,greater<pair<ll,ll>>>pq; d[s]=0; pq.push({0,s}); while(!pq.empty()){ pair<ll,ll>p=pq.top(); pq.pop(); ll v=p.second; if(d[v]<p.first)continue; for(auto e:to[v]){ if(d[e.to]>d[v]+e.cost){ d[e.to]=d[v]+e.cost; pq.push({d[e.to],e.to}); } } } } int main(){ cin>>n>>m>>p>>y; rep(i,m){ ll a,b,c; cin>>a>>b>>c; a--;b--; to[a].push_back({b,c}); to[b].push_back({a,c}); } vector<pair<ll,ll>>shop(p); rep(i,p){ cin>>shop[i].second>>shop[i].first; shop[i].second--; } sort(shop.begin(),shop.end()); goal=shop[0].second; vector<ll>d(n,1e18); dijkstra(0,d); rep(i,p){ if(y-d[shop[i].second]>0){ ans_cnt=max(ans_cnt,(y-d[shop[i].second])/shop[i].first); } } cout<<ans_cnt<<endl; return 0; }