Submission #1331494

#TimeUsernameProblemLanguageResultExecution timeMemory
1331494nicolo_010Closing Time (IOI23_closing)C++20
8 / 100
101 ms33088 KiB
#include "closing.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;

vector<vector<pii>> adj;

void dfs(int u, vector<ll> &dis, int p=-1, ll w=0) {
    dis[u] = w;
    for (auto [v, pe] : adj[u]) {
        if (v==p) continue;
        dfs(v, dis, u, w+pe);
    }
}

int max_score(int n, int x, int y, long long k,
              std::vector<int> U, std::vector<int> V, std::vector<int> W) {
    adj.assign(n, {});
    vector<ll> disX(n, 0);
    vector<ll> disY(n, 0);
    vector<ll> comb;
    for (int i=0; i<n-1; i++) {
        int u = U[i];
        int v = V[i];
        int w = W[i];
        adj[u].push_back({v, w});
        adj[v].push_back({u, w});
    }
    dfs(x, disX);
    dfs(y, disY);
    for (int i=0; i<n; i++) {
        comb.push_back(disX[i]);
        comb.push_back(disY[i]);
    }
    sort(comb.begin(), comb.end());
    int ans=0;
    for (auto val : comb) {
        if (val <= k) {
            ans++;
            k -= val;
        } 
    }
    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...