This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define F first
#define S second
#define all(x) x.begin(),x.end()
#define pii pair<int,int>
#define pb push_back
#define sz(x) (int)(x.size())
#define chmin(x,y) x=min(x,y)
#define chmax(x,y) x=max(x,y)
#define vi vector<int>
#define vp vector<pii>
#define vvi vector<vi>
const int mxn=1e5+5;
struct edge{
int v,u,d;
};
vector<edge>ed;
vector<pii>adj[mxn];
bool is_shop[mxn];
int dis[mxn];
int jump[20][mxn];
int mn[20][mxn];
int magic[mxn];
int dep[mxn];
int timer=0;
int in[mxn],out[mxn];
void calc_dis(int v,int pa){
//cout<<v<<' ';
jump[0][v]=pa;
in[v]=++timer;
dep[v]=dep[pa]+1;
for(auto u:adj[v]){
if(u.F==pa)continue;
dis[u.F]=u.S+dis[v];
calc_dis(u.F,v);
chmin(magic[v],magic[u.F]);
}
out[v]=timer;
}
void dfs(int v,int pa){
if(is_shop[v])magic[v]=dis[v];
else magic[v]=8e18;
for(auto u:adj[v]){
if(u.F==pa)continue;
dfs(u.F,v);
chmin(magic[v],magic[u.F]);
}
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int n,s,q,e;
cin>>n>>s>>q>>e;
ed.pb({0,0,0});
for(int i=1;i<n;i++){
int v,u,d;
cin>>v>>u>>d;
ed.pb({v,u,d});
adj[v].pb({u,d});
adj[u].pb({v,d});
}
for(int i=0;i<s;i++){
int x;
cin>>x;
is_shop[x]=1;
}
dis[e]=0;
calc_dis(e,0);
dfs(e,0);
for(int i=1;i<=n;i++){
magic[i]-=2*dis[i];
// cout<<magic[i]<<' ';
}
for(int i=1;i<=n;i++){
mn[0][i]=magic[jump[0][i]];
}
for(int i=1;i<20;i++){
for(int j=1;j<=n;j++){
jump[i][j]=jump[i-1][jump[i-1][j]];
mn[i][j]=min(mn[i-1][j],mn[i-1][jump[i-1][j]]);
}
}
while(q--){
int id,p;
cin>>id>>p;
int top=(dep[ed[id].v]>dep[ed[id].u]?ed[id].v:ed[id].u);
if(in[top]<=in[p] and out[top]>=out[p]){
int dif=dep[p]-dep[top];
int ans=magic[p];
//cout<<magic[p]<<' '<<dis[p]<<' ';
int x=dis[p];
for(int i=0;i<20;i++){
if(dif>>i&1){
chmin(ans,mn[i][p]);
p=jump[i][p];
}
}
if(ans==8e18)cout<<"oo\n";
else cout<<x+ans<<'\n';
}
else{
cout<<"esacped\n";
}
}
}
/*
input:
*/
# | 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... |