結果

問題 No.3013 ハチマキ買い星人
ユーザー yuutyann
提出日時 2025-01-25 13:40:32
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 452 ms / 2,000 ms
コード長 1,418 bytes
コンパイル時間 4,336 ms
コンパイル使用メモリ 285,944 KB
実行使用メモリ 21,960 KB
最終ジャッジ日時 2025-01-25 22:55:35
合計ジャッジ時間 15,020 ms
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 45
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n = 0,m = 0,p = 0;
    long long y = 0;
    cin >> n >> m >> p >> y;
    auto cmp = [](pair<int,long long> a,pair<int,long long> b) {
        return a.second < b.second;
    };
    priority_queue<pair<int,long long>,vector<pair<int,long long>>,decltype(cmp)> q(cmp);
    q.push(pair<int,long long>{0,y});
    vector<vector<pair<int,long long>>> graph(n,vector<pair<int,long long>>{});
    for (int i = 0;i < m;i++) {
        int a = 0,b = 0;
        long long c = 0;
        cin >> a >> b >> c;
        a--; b--;
        graph[a].push_back(pair<int,long long>{b,c});
        graph[b].push_back(pair<int,long long>{a,c});
    }
    vector<long long> price(n,LLONG_MAX);
    for (int i = 0;i < p;i++) {
        int d = 0;
        long long e = 0;
        cin >> d >> e;
        d--;
        price[d] = e;
    }
    vector<bool> c(n,true);
    long long ans = 0;
    while (q.size() != 0) {
        pair<int,long long> temp = q.top();
        q.pop();
        if (c[temp.first]) {
            //cout << temp.first << " " << temp.second << endl;
            c[temp.first] = false;
            ans = max(ans,temp.second / price[temp.first]);
            for (pair<int,long long> i : graph[temp.first]) {
                q.push(pair<int,long long>{i.first,max((long long)0,temp.second - i.second)});
            }
        }
    }
    cout << ans << endl;
}
0