結果
問題 | No.3013 ハチマキ買い星人 |
ユーザー |
![]() |
提出日時 | 2025-01-25 12:53:38 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 445 ms / 2,000 ms |
コード長 | 5,095 bytes |
コンパイル時間 | 2,443 ms |
コンパイル使用メモリ | 211,748 KB |
実行使用メモリ | 23,164 KB |
最終ジャッジ日時 | 2025-01-25 22:35:44 |
合計ジャッジ時間 | 14,305 ms |
ジャッジサーバーID (参考情報) |
judge9 / judge11 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 45 |
ソースコード
#include <bits/stdc++.h>//#include <atcoder/all>using namespace std;#define lli long long int#define REP(i, s, n) for (lli i = s; i < n; i++)#define INF (1LL << 62)#define mp(a, b) make_pair(a, b)#define SORT(V) sort(V.begin(), V.end())#define PI (3.141592653589794)#define TO_STRING(VariableName) #VariableName#define LOG1(x) \if (DEBUG) \cout << TO_STRING(x) << "=" << x << " " << endl;#define LOG2(x, y) \if (DEBUG) \cout << TO_STRING(x) << "=" << x << " " << TO_STRING(y) << "=" << y << endl;#define LOG3(x, y, z) \if (DEBUG) \cout << TO_STRING(x) << "=" << x << " " << TO_STRING(y) << "=" << y << " " \<< TO_STRING(z) << "=" << z << endl;#define LOG4(w, x, y, z) \if (DEBUG) \cout << TO_STRING(w) << "=" << w << " " << TO_STRING(x) << "=" << x << " " \<< TO_STRING(y) << "=" << y << " " << TO_STRING(z) << "=" << z \<< endl;#define LOG5(w, x, y, z, a) \if (DEBUG) \cout << TO_STRING(w) << "=" << w << " " << TO_STRING(x) << "=" << x << " " \<< TO_STRING(y) << "=" << y << " " << TO_STRING(z) << "=" << z << " " \<< TO_STRING(a) << "=" << a << endl;#define LOG6(w, x, y, z, a, b) \if (DEBUG) \cout << TO_STRING(w) << "=" << w << " " << TO_STRING(x) << "=" << x << " " \<< TO_STRING(y) << "=" << y << " " << TO_STRING(z) << "=" << z << " " \<< TO_STRING(a) << "=" << a << " " << TO_STRING(b) << "=" << b \<< endl;#define overload6(a, b, c, d, e, f, g, ...) g#define LOG(...) \overload6(__VA_ARGS__, LOG6, LOG5, LOG4, LOG3, LOG2, LOG1)(__VA_ARGS__)template <class T> bool chmax(T &a, const T &b) {if (a < b) {a = b;return 1;}return 0;}template <class T> bool chmin(T &a, const T &b) {if (b < a) {a = b;return 1;}return 0;}mt19937 engine;std::chrono::system_clock::time_point start, endTime;#define DEBUG 0/* dijkstra(G,s,dis,prev)入力:グラフ G, 開始点 s, 距離を格納する dis, 最短経路の前の点を記録するprev計算量:O(|E|log|V|)副作用:dis, prevが書き換えられる*/struct Edge {long long to;long long cost;};using Graph = vector<vector<Edge>>;using P = pair<long, int>;const long long INFL = 1LL << 60;void dijkstra(const Graph &G, int s, vector<long long> &dis,vector<int> &prev) {int N = G.size();dis.resize(N, INFL);prev.resize(N, -1); // 初期化priority_queue<P, vector<P>, greater<P>> pq;dis[s] = 0;pq.emplace(dis[s], s);while (!pq.empty()) {P p = pq.top();pq.pop();int v = p.second;if (dis[v] < p.first) {continue;}for (auto &e : G[v]) {if (dis[e.to] > dis[v] + e.cost) {dis[e.to] = dis[v] + e.cost;prev[e.to] = v; // 頂点 v を通って e.to にたどり着いたpq.emplace(dis[e.to], e.to);}}}}/* get_path(prev, t)入力:dijkstra で得た prev, ゴール t出力: t への最短路のパス*/vector<int> get_path(const vector<int> &prev, int t) {vector<int> path;for (int cur = t; cur != -1; cur = prev[cur]) {path.push_back(cur);}reverse(path.begin(), path.end()); // 逆順なのでひっくり返すreturn path;}void solve() {// write your code here//買う場所決めてそこで無限購入するくらいしかわからない。//ダイクストラで街までどれくらいかかるかで見るlli N, M, P, Y;cin >> N >> M >> P >> Y;Graph graph(N);REP(i, 0, M) {lli a, b, c;cin >> a >> b >> c;a--;b--;graph[a].push_back({b, c});graph[b].push_back({a, c});}vector<lli> D(P), E(P);REP(i, 0, P) {cin >> D[i] >> E[i];D[i]--;}vector<lli> dis;vector<int> prev;dijkstra(graph, 0, dis, prev);lli ans = 0;REP(i, 0, P) {lli les = Y - dis[D[i]];if (les <= 0) {continue;}chmax(ans, les / E[i]);}cout << ans << endl;}// Generated by 2.13.0 https://github.com/kyuridenamida/atcoder-tools (tips:// You use the default template now. You can remove this line by using your// custom template)int main() {// Failed to predict input formatlli N = 1;// cin >> N;while (N--)solve();return 0;}