Submission #1240838

#TimeUsernameProblemLanguageResultExecution timeMemory
1240838banganClosing Time (IOI23_closing)C++20
8 / 100
65 ms18756 KiB
#include "closing.h"
#include <bits/stdc++.h>
using namespace std;

#define pb push_back
#define eb emplace_back

#define ll long long
#define MP make_pair
#define pii pair<int, int>

const ll INF = 1ll << 50;

int max_score(int N, int X, int Y, long long K, std::vector<int> U, std::vector<int> V, std::vector<int> W) {
    vector<vector<pii>> adj(N);
    for (int i=0; i < N-1; i++) {
        adj[V[i]].eb(U[i], W[i]);
        adj[U[i]].eb(V[i], W[i]);
    }

    vector<bool> done(N);
    vector<ll> d(N, INF);
    d[X] = d[Y] = 0;
    priority_queue<pii, vector<pii>, greater<pii>> pq;
    pq.emplace(0, X);
    pq.emplace(0, Y);
    int ans = 0;

    while (!pq.empty()) {
        auto [_, v] = pq.top();
        pq.pop();
        if (done[v]) continue;
        done[v] = true;
        if (d[v] <= K) {
            ans++;
            K -= d[v];
        }
        for (auto [u, w] : adj[v]) if (d[v]+w < d[u]) {
            d[u] = d[v]+w;
            pq.push(MP(d[u], u));
        }
    }
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...