Submission #1353816

#TimeUsernameProblemLanguageResultExecution timeMemory
1353816Red_Inside봉쇄 시간 (IOI23_closing)C++20
0 / 100
1095 ms43160 KiB
#include <bits/stdc++.h>

#define ll long long
#define pb push_back
#define all(v) v.begin(), v.end()

using namespace std;

const int maxn=2e5+100;

int n, x, y, k;
ll dist[maxn][2];
vector <pair <int, int> > edge[maxn];

void dfs(int v, int pred, int t) {
    for(auto [to, w] : edge[v]) {
        if(to == pred) continue;
        dist[to][t] = dist[v][t] + w;
        dfs(to, v, t);
    }
}

int max_score(int N, int X, int Y, long long K,
              vector<int> U, vector<int> V, vector<int> W) {
    n = N;
    x = X++;
    y = Y++;
    k = K;
    for(int i = 1; i <= n; ++i) {
        edge[i].clear();
    }
    for(int i = 0; i < n - 1; ++i) {
        int l = U[i] + 1;
        int r = V[i] + 1;
        int w = W[i];
        edge[l].pb({r, w});
        edge[r].pb({l, w});
    }
    dist[x][0] = 0;
    dist[y][1] = 0;
    dfs(x, -1, 0);
    dfs(y, -1, 1);
    multiset <ll> st;
    for(int i = 1; i <= n; ++i) {
        st.insert(dist[i][0]);
        st.insert(dist[i][1]);
    }
    int ans = 0;
    while(st.size()) {
        int s = *st.begin();
        if(s <= k) {
            k -= s;
            ans++;
        }
        else
            break;
    }
    return ans;
};
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...