Submission #1158934

#TimeUsernameProblemLanguageResultExecution timeMemory
1158934nikolashamiValley (BOI19_valley)C++20
100 / 100
123 ms45664 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...