Submission #1211629

#TimeUsernameProblemLanguageResultExecution timeMemory
1211629marClosing Time (IOI23_closing)C++20
8 / 100
94 ms25528 KiB
#include "closing.h"
#include <bits/stdc++.h>
using namespace std;

#define ll long long

int max_score(int n, int x, int y, ll k, vector<int> u, vector<int> v, vector<int> w) {
    vector<vector<pair<int, int>>> g(n);
    for(int i = 0; i < n - 1; i++) {
        g[u[i]].push_back({v[i], w[i]});
        g[v[i]].push_back({u[i], w[i]});
    }

    vector<ll> dx(n, -1), dy(n, -1);
    dx[x] = 0;
    dy[y] = 0;

    queue<pair<int, int>> q;
    q.push({x, 0});
    q.push({y, 1});

    while(!q.empty()) {
        int cur = q.front().first;
        int s = q.front().second;
        q.pop();
        for (auto next : g[cur]) {
            int to = next.first;
            int cost = next.second;
            if (s == 0 && dx[to] == -1) {
                dx[to] = dx[cur] + cost;
                q.push({to, s});
            }
            if (s == 1 && dy[to] == -1) {
                dy[to] = dy[cur] + cost;
                q.push({to, s});
            }
        }
    }

    ll res = 0;
    vector<ll> c1(n), c2(n);
    priority_queue<ll> pq;

    for(int i = 0; i < n; i++) {
        c1[i] = min(dx[i], dy[i]);
        c2[i] = max(dx[i], dy[i]);
        pq.push(-c1[i]);
        if (dx[i] + dy[i] == dx[y]) {
            res += c1[i];
            c2[i] -= c1[i];
            c1[i] = 0;
        }
    }

    int ans = 0;
    ll rem = k;
    while(!pq.empty() && rem >= -pq.top()) {
        rem += pq.top();
        pq.pop();
        ans++;
    }

    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...