Submission #1115381

# Submission time Handle Problem Language Result Execution time Memory
1115381 2024-11-20T12:07:09 Z gustavo_d Race (IOI11_race) C++17
21 / 100
3000 ms 48308 KB
// #include "race.h"
#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O3,unroll-loops")
 
const int MAXN = 2e5;
const int MAXV = 1e6+1;
vector<pair<int, int>> adj[MAXN];
bool vis[MAXN];
int sz[MAXN];
bool in[MAXN];
 
int n, k;
 
void dfs(int v, int pai) {
    sz[v] = 1;
    for (auto& [viz, w] : adj[v]) {
        if (viz == pai or in[viz]) continue;
        dfs(viz, v);
        sz[v] += sz[viz];
    }
}
 
int find_centroid(int v, int pai, int qty) {
    // cout << "buscando centroid " << v << endl;
    for (auto& [viz, w] : adj[v]) {
        if (viz == pai or in[viz]) continue;
        if (sz[viz] > qty / 2) return find_centroid(viz, v, qty);
    }
    // cout << "é" << v <<endl;
    return v;
}
 
vector<int> sub_mn_depth(MAXV, 1e8);
vector<pair<int, int>> dists[MAXV];
vector<int> sub_dists;
void get_dist(int v, int pai, int dist, int depth) {
    if (dist > k) return;
    sub_mn_depth[dist] = min(sub_mn_depth[dist], depth);
    sub_dists.push_back(dist);
    for (auto& [viz, w] : adj[v]) {
        if (viz == pai or in[viz]) continue;
        get_dist(viz, v, dist + w, depth+1);
    }
}
 
int ans = 1e8;
void decomp(int v) {
    dfs(v, -1);
    int centroid = find_centroid(v, -1, sz[v]);
    in[centroid] = true;
    vector<int> all_dists;
    // if (centroid == 8) cout << centroid << " é centroid decompondo" << v << endl;
    for (auto& [viz, w] : adj[centroid]) {
        if (in[viz]) continue;
        get_dist(viz, centroid, w, 1);
        for (int d : sub_dists) {
            dists[d].push_back({sub_mn_depth[d], viz});
            sub_mn_depth[d] = 1e8;
            all_dists.push_back(d);
        }
        sub_dists.clear();
    }
    for (int d : all_dists) {
        sort(dists[d].begin(), dists[d].end());
    }
    if (!dists[k].empty()) ans = min(ans, dists[k][0].first);
    for (auto& [viz, w] : adj[centroid]) {
        if (in[viz]) continue;
        get_dist(viz, centroid, w, 1);
        for (int d : sub_dists) {
            for (int i=0; d <= k and i<min(2, (int)dists[k-d].size()); i++) {
                if (dists[k-d][i].second == viz) continue;
                ans = min(ans, dists[k-d][i].first + sub_mn_depth[d]);
            }
            sub_mn_depth[d] = 1e8;
        }
        sub_dists.clear();
    }
    for (int d : all_dists) dists[d].clear();
    for (auto& [viz, w] : adj[centroid]) {
        if (in[viz]) continue;
        decomp(viz);
    }
}
 
int best_path(int N, int K, int H[][2], int L[]) {
    n = N; k = K;
    for (int i=0; i<N-1; i++) {
        int u = H[i][0], v = H[i][1];
        int w = L[i];
        adj[u].push_back({v, w});
        adj[v].push_back({u, w});
    }
 
    dfs(0, -1);
    decomp(0);
 
    return (ans == (int)1e8 ? -1 : ans);
}
# Verdict Execution time Memory Grader output
1 Correct 8 ms 37200 KB Output is correct
2 Correct 8 ms 37212 KB Output is correct
3 Correct 7 ms 37200 KB Output is correct
4 Correct 8 ms 37368 KB Output is correct
5 Correct 8 ms 37200 KB Output is correct
6 Correct 8 ms 37200 KB Output is correct
7 Correct 8 ms 37200 KB Output is correct
8 Correct 8 ms 37368 KB Output is correct
9 Correct 8 ms 37340 KB Output is correct
10 Correct 7 ms 37200 KB Output is correct
11 Correct 8 ms 37368 KB Output is correct
12 Correct 7 ms 37200 KB Output is correct
13 Correct 8 ms 37200 KB Output is correct
14 Correct 8 ms 37200 KB Output is correct
15 Correct 8 ms 37200 KB Output is correct
16 Correct 8 ms 37200 KB Output is correct
17 Correct 7 ms 37200 KB Output is correct
18 Correct 7 ms 37200 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 8 ms 37200 KB Output is correct
2 Correct 8 ms 37212 KB Output is correct
3 Correct 7 ms 37200 KB Output is correct
4 Correct 8 ms 37368 KB Output is correct
5 Correct 8 ms 37200 KB Output is correct
6 Correct 8 ms 37200 KB Output is correct
7 Correct 8 ms 37200 KB Output is correct
8 Correct 8 ms 37368 KB Output is correct
9 Correct 8 ms 37340 KB Output is correct
10 Correct 7 ms 37200 KB Output is correct
11 Correct 8 ms 37368 KB Output is correct
12 Correct 7 ms 37200 KB Output is correct
13 Correct 8 ms 37200 KB Output is correct
14 Correct 8 ms 37200 KB Output is correct
15 Correct 8 ms 37200 KB Output is correct
16 Correct 8 ms 37200 KB Output is correct
17 Correct 7 ms 37200 KB Output is correct
18 Correct 7 ms 37200 KB Output is correct
19 Correct 7 ms 37200 KB Output is correct
20 Correct 7 ms 37200 KB Output is correct
21 Correct 8 ms 37200 KB Output is correct
22 Correct 8 ms 37200 KB Output is correct
23 Correct 8 ms 37200 KB Output is correct
24 Correct 8 ms 37456 KB Output is correct
25 Correct 9 ms 37456 KB Output is correct
26 Correct 9 ms 37216 KB Output is correct
27 Correct 8 ms 37200 KB Output is correct
28 Correct 8 ms 37456 KB Output is correct
29 Correct 8 ms 37364 KB Output is correct
30 Correct 8 ms 37456 KB Output is correct
31 Correct 8 ms 37456 KB Output is correct
32 Correct 8 ms 37456 KB Output is correct
33 Correct 8 ms 37456 KB Output is correct
34 Correct 8 ms 37456 KB Output is correct
35 Correct 8 ms 37456 KB Output is correct
36 Correct 7 ms 37456 KB Output is correct
37 Correct 9 ms 37456 KB Output is correct
38 Correct 8 ms 37456 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 8 ms 37200 KB Output is correct
2 Correct 8 ms 37212 KB Output is correct
3 Correct 7 ms 37200 KB Output is correct
4 Correct 8 ms 37368 KB Output is correct
5 Correct 8 ms 37200 KB Output is correct
6 Correct 8 ms 37200 KB Output is correct
7 Correct 8 ms 37200 KB Output is correct
8 Correct 8 ms 37368 KB Output is correct
9 Correct 8 ms 37340 KB Output is correct
10 Correct 7 ms 37200 KB Output is correct
11 Correct 8 ms 37368 KB Output is correct
12 Correct 7 ms 37200 KB Output is correct
13 Correct 8 ms 37200 KB Output is correct
14 Correct 8 ms 37200 KB Output is correct
15 Correct 8 ms 37200 KB Output is correct
16 Correct 8 ms 37200 KB Output is correct
17 Correct 7 ms 37200 KB Output is correct
18 Correct 7 ms 37200 KB Output is correct
19 Correct 272 ms 43408 KB Output is correct
20 Correct 221 ms 43488 KB Output is correct
21 Correct 916 ms 44056 KB Output is correct
22 Correct 1667 ms 44992 KB Output is correct
23 Correct 59 ms 43336 KB Output is correct
24 Correct 51 ms 43324 KB Output is correct
25 Correct 195 ms 44324 KB Output is correct
26 Execution timed out 3063 ms 48308 KB Time limit exceeded
27 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 8 ms 37200 KB Output is correct
2 Correct 8 ms 37212 KB Output is correct
3 Correct 7 ms 37200 KB Output is correct
4 Correct 8 ms 37368 KB Output is correct
5 Correct 8 ms 37200 KB Output is correct
6 Correct 8 ms 37200 KB Output is correct
7 Correct 8 ms 37200 KB Output is correct
8 Correct 8 ms 37368 KB Output is correct
9 Correct 8 ms 37340 KB Output is correct
10 Correct 7 ms 37200 KB Output is correct
11 Correct 8 ms 37368 KB Output is correct
12 Correct 7 ms 37200 KB Output is correct
13 Correct 8 ms 37200 KB Output is correct
14 Correct 8 ms 37200 KB Output is correct
15 Correct 8 ms 37200 KB Output is correct
16 Correct 8 ms 37200 KB Output is correct
17 Correct 7 ms 37200 KB Output is correct
18 Correct 7 ms 37200 KB Output is correct
19 Correct 7 ms 37200 KB Output is correct
20 Correct 7 ms 37200 KB Output is correct
21 Correct 8 ms 37200 KB Output is correct
22 Correct 8 ms 37200 KB Output is correct
23 Correct 8 ms 37200 KB Output is correct
24 Correct 8 ms 37456 KB Output is correct
25 Correct 9 ms 37456 KB Output is correct
26 Correct 9 ms 37216 KB Output is correct
27 Correct 8 ms 37200 KB Output is correct
28 Correct 8 ms 37456 KB Output is correct
29 Correct 8 ms 37364 KB Output is correct
30 Correct 8 ms 37456 KB Output is correct
31 Correct 8 ms 37456 KB Output is correct
32 Correct 8 ms 37456 KB Output is correct
33 Correct 8 ms 37456 KB Output is correct
34 Correct 8 ms 37456 KB Output is correct
35 Correct 8 ms 37456 KB Output is correct
36 Correct 7 ms 37456 KB Output is correct
37 Correct 9 ms 37456 KB Output is correct
38 Correct 8 ms 37456 KB Output is correct
39 Correct 272 ms 43408 KB Output is correct
40 Correct 221 ms 43488 KB Output is correct
41 Correct 916 ms 44056 KB Output is correct
42 Correct 1667 ms 44992 KB Output is correct
43 Correct 59 ms 43336 KB Output is correct
44 Correct 51 ms 43324 KB Output is correct
45 Correct 195 ms 44324 KB Output is correct
46 Execution timed out 3063 ms 48308 KB Time limit exceeded
47 Halted 0 ms 0 KB -