Submission #1212026

#TimeUsernameProblemLanguageResultExecution timeMemory
1212026trimkusClosing Time (IOI23_closing)C++20
17 / 100
60 ms18756 KiB
#include "closing.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
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<pair<int, int>>> adj(N);
    for (int i = 0; i < N - 1; ++i) {
        adj[U[i]].push_back({V[i], W[i]});
        adj[V[i]].push_back({U[i], W[i]});
    }
    vector<ll> c(N);
    ll sum = 0;
    int res = 0;
    priority_queue<array<ll, 3>> pq;
    vector<vector<bool>> vis(2, vector<bool>(N));
    pq.push({0, X, 0});
    pq.push({0, Y, 1});
    vis[0][X] = 1;
    vis[1][Y] = 1;
    while (pq.size()) {
        ll T =  -pq.top()[0];
        int v = pq.top()[1];
        int p = pq.top()[2];
        pq.pop();
        // cout << v << " , " << p << " = " << T << "\n";
        if (sum + T - c[v] > K) continue;
        res += 1;
        sum += T - c[v];
        c[v] = T;
        for (auto& [u, w] : adj[v]) {
            if (vis[p][u]) continue;
            vis[p][u] = 1;
            pq.push({-T - w, u, p});
        }
    }
    return res;
}
#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...