Submission #594670

# Submission time Handle Problem Language Result Execution time Memory
594670 2022-07-12T19:36:49 Z AlesL0 Valley (BOI19_valley) C++17
36 / 100
469 ms 262144 KB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const ll INF = 1e18, sINF = 1e16;

vector <ll> f, dist;
vector <int> h, open, closed;
vector <vector<ll>> bin;
vector <vector<int>> anc;
vector <vector<pair<int, int>>> g;
vector <bool> is_shop;
ll timer = 0;

void dfs(int c, vector<bool> b){
    open[c] = timer++;
    b[c] = 1;
    if (is_shop[c])f[c] = 0;
    for (auto k : g[c]){
        if (b[k.first])continue;
        h[k.first] = h[c]+1;
        dist[k.first] = dist[c]+k.second;
        anc[k.first][0] = c;
        dfs(k.first, b);
        f[c] = min(f[c], f[k.first]+k.second);
    }
    closed[c] = timer++;
}

void build(int n){
    //resize anc ecc.
    for (int i = 1; i <= n; i++)bin[i][0] = f[anc[i][0]]-dist[anc[i][0]];
    for (int j = 1; j < 9; j++){
        for (int i = 1; i <= n; i++){
            anc[i][j] = anc[anc[i][j-1]][j-1];
            bin[i][j] = min(bin[i][j-1], bin[anc[i][j-1]][j-1]);
        }
    }
}

ll query(int a, int b){
    if (a == b)return f[a];
    int x = h[a]-h[b];
    ll len = dist[a];
    ll m = f[a]-len;
    for (int i = 0; i < 9; i++){
        if (x & (1<<i)){
            m = min(m, bin[a][i]);
            a = anc[a][i];
        }
    }
    return m+len;
}

int main(){
    int n, s, q, e; cin >> n >> s >> q >> e;
    vector <pair<int, int>> edge(1);
    h.resize(n+1); dist.resize(n+1); f.resize(n+1, INF); open.resize(n+1); closed.resize(n+1); g.resize(n+1); bin.resize(n+1); anc.resize(n+1); is_shop.resize(n+1, 0);
    for (int i = 1; i <= n; i++){anc[i].resize(9); bin[i].resize(9);}
    for (int i = 0; i < n-1; i++){
        int a, b, w; cin >> a >> b >> w;
        g[a].push_back({b, w});
        g[b].push_back({a, w});
        edge.push_back({a, b});
    }
    while (s--){
        int c; cin >> c;
        is_shop[c] = 1;
    }
    h[e] = 0; dist[e] = 0; anc[e][0] = e;
    vector<bool> boh(n+1, 0);
    dfs(e, boh);
    build(n);
    while (q--){
        int ind, r; cin >> ind >> r;
        int x = edge[ind].first;
        if (h[edge[ind].first] < h[edge[ind].second])x = edge[ind].second;
        if (!(open[r] >= open[x] && closed[r] <= closed[x]))cout << "escaped" << "\n";
        else {
            ll k = query(r, x);
            if (k >= sINF)cout << "oo" << "\n";
            else cout << k << "\n";
        }
    }
}
# Verdict Execution time Memory Grader output
1 Correct 16 ms 340 KB Output is correct
2 Correct 16 ms 376 KB Output is correct
3 Correct 16 ms 376 KB Output is correct
4 Correct 15 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 16 ms 340 KB Output is correct
2 Correct 16 ms 376 KB Output is correct
3 Correct 16 ms 376 KB Output is correct
4 Correct 15 ms 384 KB Output is correct
5 Correct 5 ms 468 KB Output is correct
6 Correct 3 ms 468 KB Output is correct
7 Correct 4 ms 596 KB Output is correct
8 Correct 3 ms 468 KB Output is correct
9 Correct 4 ms 468 KB Output is correct
10 Correct 4 ms 596 KB Output is correct
11 Correct 4 ms 468 KB Output is correct
12 Correct 4 ms 468 KB Output is correct
13 Correct 4 ms 596 KB Output is correct
14 Correct 4 ms 648 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 424 ms 28084 KB Output is correct
2 Correct 464 ms 28008 KB Output is correct
3 Correct 469 ms 34216 KB Output is correct
4 Runtime error 279 ms 262144 KB Execution killed with signal 9
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 16 ms 340 KB Output is correct
2 Correct 16 ms 376 KB Output is correct
3 Correct 16 ms 376 KB Output is correct
4 Correct 15 ms 384 KB Output is correct
5 Correct 5 ms 468 KB Output is correct
6 Correct 3 ms 468 KB Output is correct
7 Correct 4 ms 596 KB Output is correct
8 Correct 3 ms 468 KB Output is correct
9 Correct 4 ms 468 KB Output is correct
10 Correct 4 ms 596 KB Output is correct
11 Correct 4 ms 468 KB Output is correct
12 Correct 4 ms 468 KB Output is correct
13 Correct 4 ms 596 KB Output is correct
14 Correct 4 ms 648 KB Output is correct
15 Correct 424 ms 28084 KB Output is correct
16 Correct 464 ms 28008 KB Output is correct
17 Correct 469 ms 34216 KB Output is correct
18 Runtime error 279 ms 262144 KB Execution killed with signal 9
19 Halted 0 ms 0 KB -