Submission #1306793

#TimeUsernameProblemLanguageResultExecution timeMemory
1306793saken03Valley (BOI19_valley)C++20
0 / 100
6 ms888 KiB
#include <iostream>
#include <vector>

#define pb push_back

using namespace std;

const int N = 1e3 + 5;

int n, s, q, e;
int weight[N][N], dist[N];
pair<int, int> edge[N];
vector<int> g[N], shops;
bool is_esc[N];

void escape(int v, int p = -1) {
    is_esc[v] = 1;

    for (int to : g[v]) {
        if (to != p) {
            escape(to, v);
        }
    }
}

void calcDist(int v, int p = -1) {
    dist[v] = 0;
    for (int to : g[v]) {
        if (to == p) continue;
        dist[to] = min(dist[to], dist[v] + weight[v][to]);
        calcDist(to, v);
    }
}

void solve() {
    cin >> n >> s >> q >> e;

    for (int i = 0; i < n - 1; i++) {
        int a, b, c;
        cin >> a >> b >> c;

        weight[a][b] = weight[b][a] = c;
        g[a].pb(b);
        g[b].pb(a);
        edge[i] = {a, b};
    }

    while (s--) {
        int c;
        cin >> c;
        shops.pb(c);
    }

    while (q--) {
        int i, r;
        cin >> i >> r;

        escape(e);
        if (is_esc[r]) {
            cout << "escaped\n";
            continue;
        }
        
        for (int ss : shops) {
            calcDist(ss);
        }
        cout << dist[r] << '\n';
    }
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    solve();

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...