#include <bits/stdc++.h>
#pragma GCC target("avx2")
#pragma GCC optimize("O3,unroll-loops")
using namespace std;
#define int long long
#define pii pair<int,int>
#define ff first
#define ss second
#define sp << " " <<
#define all(cont) cont.begin(),cont.end()
#define vi vector<int>
const int inf = 1e18,N = 3e5+1,MOD = 998244353,BL = 1000;
vector<pii> edges[N];
vi d(N),tin(N),tout(N),shop(N,0),f(N);
int timer = 1;
int up[N][20];
int opt[N][20];
void dfs(int node,int p) {
up[node][0] = p;
for (int i=1;i<20;i++) up[node][i] = up[up[node][i-1]][i-1];
tin[node] = timer++;
if (node == p) d[node] = 0;
for (auto it : edges[node]) {
if (it.ff == p) continue;
d[it.ff] = d[node]+it.ss;
dfs(it.ff,node);
}
tout[node] = timer-1;
if (!shop[node]) {
shop[node] = inf;
for (auto it : edges[node]) {
if (it.ff == p) continue;
shop[node] = min(shop[node],shop[it.ff]);
}
}
else shop[node] = d[node];
f[node] = shop[node]-2*d[node];
}
bool anc(int a,int b) {
return tin[a] <= tin[b] && tout[a] >= tout[b];
}
void solve() {
int n,s,q,e;
cin >> n >> s >> q >> e;
vector<pii> edg(n);
for (int i=1;i<n;i++) {
int a,b,c;
cin >> a >> b >> c;
edg[i] = {a,b};
edges[a].push_back({b,c});
edges[b].push_back({a,c});
}
for (int i=1;i<=s;i++) {
int p;
cin >> p;
shop[p] = 1;
}
dfs(e,e);
for (int i=1;i<=n;i++) opt[i][0] = f[i];
for (int j = 1;j<20;j++) {
for (int i=1;i<=n;i++) {
opt[i][j] = min(opt[i][j-1],opt[up[i][j-1]][j-1]);
}
}
while (q--) {
int block,node;
cin >> block >> node;
int v = node;
if (anc(edg[block].ff,edg[block].ss)) swap(edg[block].ff,edg[block].ss);
if (!anc(edg[block].ff,node)) {
cout << "escaped\n";
continue;
}
int ans = f[node];
for (int i = 19;i>=0;i--) {
if (!anc(up[node][i],edg[block].ss)) {
ans = min(ans,opt[node][i]);
node = up[node][i];
}
}
ans = min(ans,opt[node][0]);
if (ans >= 1e17) cout << "oo\n";
else cout << d[v]+ans << '\n';
}
}
int32_t main() {
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#ifdef Dodi
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
int t = 1;
//cin >> t;
while (t --> 0) solve();
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |