/***ThanhCodeDao***/
/*****Azazel*****/
#include<bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define pb push_back
#define checkbit(mask,i) ((mask>>i)&1)
#define bit(i) (1<<i)
#define Mlog 17
typedef long long ll;
const ll maxN = 1e5+3 ,modd = 1e9+7;
int n,s,q,r;
vector<pair<int,int>> adj[maxN];
pair<int,int> e[maxN];
int st[maxN], fn[maxN], cnt = 0, pa[Mlog+1][maxN];
ll h[maxN], d[maxN];
ll near[maxN], mind[Mlog+1][maxN];
void pre_dfs(int u,int par){
st[u] = ++cnt;
for(pair<int,int> pp : adj[u]){
int v = pp.F, w = pp.S;
if(v==par) continue;
d[v] = d[u] + w;
h[v] = h[u] + 1;
pa[0][v] = u;
pre_dfs(v,u);
near[u] = min(near[u], near[v] + w);
}
fn[u] = cnt;
}
bool checkpar(int u,int v){
return (st[u] <= st[v] and fn[v] <= fn[u]);
}
void solve(){
cin >> n >> s >> q >> r;
for(int i = 1;i<=n;i++) near[i] = 1e18;
for(int i = 1;i<=n-1;i++){
int u,v,w; cin >> u >> v >> w;
adj[u].pb({v,w});
adj[v].pb({u,w});
e[i] = {u,v};
}
for(int i = 1;i<=s;i++){
int c; cin >> c;
near[c] = 0;
}
pre_dfs(r,0);
for(int i = 1;i<=n-1;i++){
if(st[e[i].F] > st[e[i].S]) swap(e[i].F,e[i].S);
}
for(int i = 1;i<=n;i++){
mind[0][i] = near[i] - d[i];
}
for(int i = 1;i<=Mlog;i++){
for(int j = 1;j<=n;j++){
pa[i][j] = pa[i-1][pa[i-1][j]];
mind[i][j] = min(mind[i-1][j], mind[i-1][pa[i-1][j]]);
}
}
while(q--){
int id,pos;
cin >> id >> pos;
int v = e[id].S;
if(!checkpar(v,pos)){
cout << "escaped" << '\n';
continue;
}
int kc = h[pos] - h[v] + 1;
ll res = 1e18;
int u = pos;
for(int i = 0;i<=Mlog;i++){
if(checkbit(kc,i)){
res = min(res, mind[i][u]);
u = pa[i][u];
}
}
res += d[pos];
if(res > 1e17){
cout << "oo" << '\n';
continue;
}
cout << res << '\n';
}
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0), cout.tie(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... |