Submission #1233356

#TimeUsernameProblemLanguageResultExecution timeMemory
1233356Sir_Ahmed_ImranClosing Time (IOI23_closing)C++17
0 / 100
1145 ms2146248 KiB
#include "closing.h"
#include <bits/stdc++.h>
using namespace std;
#define MAXN 200001
#define nl '\n'
#define ff first
#define ss second
#define ll long long
#define ld long double
#define terminator main
#define pll pair<ll,ll>
#define append push_back
#define pii pair<int,int>
#define all(x) (x).begin(),(x).end()

ll d[MAXN][2];
vector<pii> a[MAXN];

void dfs(int v, int u, int t){
    for(auto & [i, j] : a[v]){
        if(i == u) continue;
        d[i][t] = d[v][t] + j;
        dfs(i, v, t);
    }    
}

int max_score(int n, int X, int Y, ll K,
              vector<int> U, std::vector<int> V, vector<int> W){
    ll k;
    int ans;
    for(int i = 0; i < n - 1; i++){
        a[V[i]].append({U[i], W[i]});
        a[U[i]].append({V[i], W[i]});
    }
    dfs(X, -1, 0);
    dfs(Y, -1, 1);
    vector<ll> v;
    for(int i = 0; i < n; i++)
        v.append(min(d[i][0], d[i][1]));
    sort(all(v));
    ans = k = 0;
    for(auto & i : v){
        if(k + i > K) break;
        k += i;
        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...