#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const ll N=1e5+4,inf=2e18;
vector<array<ll,2>>g[N];
ll f[N],shp[N],dep[N],up[N][17],fm[N][17];
array<ll,2>e[N];
ll tin[N],tout[N],ti,n,s,q,ext;
void dfs(ll u,ll p){
f[u]=((shp[u]^1)*inf+dep[u]);
up[u][0]=p;
tin[u]=++ti;
for(auto[v,w]:g[u]){
if(!(v^p))continue;
dep[v]=dep[u]+w;
dfs(v,u);
f[u]=min(f[u],f[v]);
}
tout[u]=++ti;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n>>s>>q>>ext;
for(int i=1,u,v,w;i<n;++i){
cin>>u>>v>>w;
g[u].push_back({v,w});
g[v].push_back({u,w});
e[i]={u,v};
}
for(int i=0,ss;i<s;++i){
cin>>ss;
shp[ss]=1;
}
dfs(ext,0);
for(int i=1;i<=n;++i){
fill(fm[i],fm[i]+17,inf);
f[i]-=2*dep[i];
fm[i][0]=f[i];
}
for(int i=1;i<17;++i){
for(int j=1;j<=n;++j){
up[j][i]=up[up[j][i-1]][i-1];
fm[j][i]=min(fm[j][i-1],fm[up[j][i-1]][i-1]);
}
}
auto anc=[](ll u,ll v){
return(tin[u]<=tin[v]&&tout[u]>=tout[v]);
};
while(q--){
ll E,U,ou;cin>>E>>U;
auto[u,v]=e[E];ou=U;
if(u==up[v][0])swap(u,v);
if(!anc(u,U)){cout<<"escaped\n";continue;}
ll mn=inf;
for(int i=16;i>=0;--i){
if(up[U][i]&&!anc(up[U][i],u))
mn=min(mn,fm[U][i]),U=up[U][i];
}
mn=min(mn,fm[U][(u!=U)]);
cout<<(mn>=inf/2?"oo":to_string(dep[ou]+mn))<<'\n';
}
}
# | 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... |