Submission #1233352

#TimeUsernameProblemLanguageResultExecution timeMemory
1233352Sir_Ahmed_ImranClosing Time (IOI23_closing)C++17
0 / 100
1131 ms2101304 KiB
#include "closing.h"
#include <bits/stdc++.h>
using namespace std;
#define MAXN 100001
#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];
bool vis[MAXN];
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 x;
    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<pll> v, u;
    for(int i = 0; i < n; i++){
        v.append({min(d[i][0], d[i][1]), i});
        u.append({max(d[i][0], d[i][1]), i});
    }
    int ans = 0;
    sort(all(v));
    sort(all(u));
    for(int i = 0; i <= n; i++){
        k = 0;
        x = i * 2;
        for(auto & j : v){
            if(vis[j.ss]) continue;
            if(k + j.ff > K) break;
            k += j.ff;
            x++;
        }
        ans = max(ans, x);
        if(i == n) break;
        K -= u[i].ff;
        vis[u[i].ss] = 1;
        if(K < 0) break;
    }
    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...