Submission #998162

# Submission time Handle Problem Language Result Execution time Memory
998162 2024-06-13T11:02:19 Z The_Samurai Race (IOI11_race) C++17
9 / 100
223 ms 28448 KB
#include "bits/stdc++.h"
#include "race.h"
using namespace std;
using ll = long long;
const int inf = 1e9, N = 2e5 + 5;
int ans = inf, k;

vector<vector<pair<int, int>>> g(N);
vector<int> par(N, -1), heavy(N), height2(N);
vector<ll> height(N), diff(N);
vector<set<pair<ll, int>>> st(N);

/*
height[heavy[u]] - height[v] = k + 


height[v] - height[u] = k?????


height[heavy[u]] - k - height[u] = height[v]
*/

int dfs(int u) {
    heavy[u] = u;
    int size = 1, max_child_size = 0;
    for (auto [v, w]: g[u]) {
        if (par[u] == v) continue;
        height[v] = height[u] + w;
        height2[v] = height2[u] + 1;
        par[v] = u;
        int child_size = dfs(v);
        if (child_size > max_child_size) {
            heavy[u] = heavy[v];
            max_child_size = child_size;
        }
        size += child_size;
    }
    diff[u] = height[heavy[u]] - height[u];
    return size;
}

void dfs2(int u) {
    for (auto [v, w]: g[u]) {
        if (par[u] == v) continue;
        dfs2(v);
    }
    multiset<pair<ll, int>> shit;
    for (auto it: st[heavy[u]]) shit.insert(it);
    // cout << u << ' ' << heavy[u] << endl;
    for (auto [v, w]: g[u]) {
        if (par[u] == v or heavy[u] == heavy[v]) continue;
        for (auto it: st[heavy[v]]) {
            it.first += height[heavy[u]] - height[heavy[v]];
            st[heavy[u]].insert(it);
            shit.insert(it);
        }
    }
    // if (u == 1) {
    //     for (auto it: shit) {
    //         cout << it.first << ' ' << it.second << endl;
    //     }
    // }
    for (auto [v, w]: g[u]) {
        if (par[u] == v or heavy[u] == heavy[v]) continue;
        for (auto it: st[heavy[v]]) {
            it.first += height[heavy[u]] - height[heavy[v]];
            shit.erase(shit.find(it));
        }
        for (auto it: st[heavy[v]]) {
            it.first += height[heavy[u]] - height[heavy[v]];
            ll need = k - (height[heavy[u]] - it.first) + height[u];
            auto it2 = shit.lower_bound(make_pair(height[heavy[u]] - need, 0));
            if (it2 != shit.end() and it2->first == height[heavy[u]] - need) {
                ans = min(ans, it2->second + it.second - 2 * height2[u]);
            }
        }
        for (auto it: st[heavy[v]]) {
            it.first += height[heavy[u]] - height[heavy[v]];
            shit.insert(it);
        }
        st[heavy[v]].clear();
    }

    st[heavy[u]].emplace(diff[u], height2[u]);
    ll search = height[heavy[u]] - k - height[u];
    auto it = st[heavy[u]].lower_bound(make_pair(search, 0));
    if (it != st[heavy[u]].end() and it->first == search) {
        ans = min(ans, it->second - height2[u]);
    }
}

int best_path(int n, int K, int H[][2], int L[]) {
    k = K;
    for (int i = 0; i < n - 1; i++) {
        g[H[i][0]].emplace_back(H[i][1], L[i]);
        g[H[i][1]].emplace_back(H[i][0], L[i]);
    }
    // change it
    dfs(0);
    dfs2(0);
    return ans == inf ? -1 : ans;
}
# Verdict Execution time Memory Grader output
1 Correct 6 ms 22104 KB Output is correct
2 Correct 5 ms 22108 KB Output is correct
3 Correct 5 ms 22108 KB Output is correct
4 Correct 6 ms 22108 KB Output is correct
5 Correct 6 ms 22108 KB Output is correct
6 Correct 6 ms 22020 KB Output is correct
7 Correct 5 ms 21924 KB Output is correct
8 Correct 5 ms 22108 KB Output is correct
9 Correct 7 ms 22108 KB Output is correct
10 Correct 6 ms 22104 KB Output is correct
11 Correct 6 ms 22104 KB Output is correct
12 Correct 6 ms 22108 KB Output is correct
13 Correct 6 ms 21884 KB Output is correct
14 Correct 7 ms 22108 KB Output is correct
15 Correct 6 ms 22108 KB Output is correct
16 Correct 7 ms 22108 KB Output is correct
17 Correct 6 ms 22108 KB Output is correct
18 Correct 6 ms 22108 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 6 ms 22104 KB Output is correct
2 Correct 5 ms 22108 KB Output is correct
3 Correct 5 ms 22108 KB Output is correct
4 Correct 6 ms 22108 KB Output is correct
5 Correct 6 ms 22108 KB Output is correct
6 Correct 6 ms 22020 KB Output is correct
7 Correct 5 ms 21924 KB Output is correct
8 Correct 5 ms 22108 KB Output is correct
9 Correct 7 ms 22108 KB Output is correct
10 Correct 6 ms 22104 KB Output is correct
11 Correct 6 ms 22104 KB Output is correct
12 Correct 6 ms 22108 KB Output is correct
13 Correct 6 ms 21884 KB Output is correct
14 Correct 7 ms 22108 KB Output is correct
15 Correct 6 ms 22108 KB Output is correct
16 Correct 7 ms 22108 KB Output is correct
17 Correct 6 ms 22108 KB Output is correct
18 Correct 6 ms 22108 KB Output is correct
19 Incorrect 6 ms 21852 KB Output isn't correct
20 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 6 ms 22104 KB Output is correct
2 Correct 5 ms 22108 KB Output is correct
3 Correct 5 ms 22108 KB Output is correct
4 Correct 6 ms 22108 KB Output is correct
5 Correct 6 ms 22108 KB Output is correct
6 Correct 6 ms 22020 KB Output is correct
7 Correct 5 ms 21924 KB Output is correct
8 Correct 5 ms 22108 KB Output is correct
9 Correct 7 ms 22108 KB Output is correct
10 Correct 6 ms 22104 KB Output is correct
11 Correct 6 ms 22104 KB Output is correct
12 Correct 6 ms 22108 KB Output is correct
13 Correct 6 ms 21884 KB Output is correct
14 Correct 7 ms 22108 KB Output is correct
15 Correct 6 ms 22108 KB Output is correct
16 Correct 7 ms 22108 KB Output is correct
17 Correct 6 ms 22108 KB Output is correct
18 Correct 6 ms 22108 KB Output is correct
19 Incorrect 223 ms 28448 KB Output isn't correct
20 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 6 ms 22104 KB Output is correct
2 Correct 5 ms 22108 KB Output is correct
3 Correct 5 ms 22108 KB Output is correct
4 Correct 6 ms 22108 KB Output is correct
5 Correct 6 ms 22108 KB Output is correct
6 Correct 6 ms 22020 KB Output is correct
7 Correct 5 ms 21924 KB Output is correct
8 Correct 5 ms 22108 KB Output is correct
9 Correct 7 ms 22108 KB Output is correct
10 Correct 6 ms 22104 KB Output is correct
11 Correct 6 ms 22104 KB Output is correct
12 Correct 6 ms 22108 KB Output is correct
13 Correct 6 ms 21884 KB Output is correct
14 Correct 7 ms 22108 KB Output is correct
15 Correct 6 ms 22108 KB Output is correct
16 Correct 7 ms 22108 KB Output is correct
17 Correct 6 ms 22108 KB Output is correct
18 Correct 6 ms 22108 KB Output is correct
19 Incorrect 6 ms 21852 KB Output isn't correct
20 Halted 0 ms 0 KB -