Submission #1248577

#TimeUsernameProblemLanguageResultExecution timeMemory
1248577BoomydayClosing Time (IOI23_closing)C++20
8 / 100
150 ms34504 KiB
#include "closing.h"

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

using ll = long long;

vector<ll> distx, disty;
vector<vector<pair<ll,int>>> adj;

void get_dist(vector<ll>& dist, int u, int p = -1){
    for(auto& [w, v]:adj[u]) if (v != p){
        dist[v] = dist[u] + w;
        get_dist(dist, v, u);
    }

}
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.clear();
    adj.resize(N);
    for(int i=0;i<N-1;++i){
        adj[U[i]].push_back({W[i], V[i]});
        adj[V[i]].push_back({W[i], U[i]});
    }

    distx.resize(N); disty.resize(N);
    distx[X] = 0;
    disty[Y] = 0;
    get_dist(distx, X);
    get_dist(disty, Y);



    // solve the first subtask
    ll ans = 0;

    vector<ll> dists;

    for(int i=0;i<N;++i) dists.push_back(min(distx[i], disty[i]));

    sort(dists.begin(), dists.end());
    ll kk = K;
    for(auto&d:dists){
        if (kk < d) break;
        ans += 1;
        kk -= d;
    }


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