Submission #1201781

#TimeUsernameProblemLanguageResultExecution timeMemory
1201781thanhcodedaoValley (BOI19_valley)C++20
59 / 100
443 ms22852 KiB
/****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 18 typedef long long ll; const ll maxN = 1e5+5, modd = 1e9+7; vector<pair<ll,ll>> adj[maxN]; int n,s,q,e; int c[maxN]; int st[maxN],fn[maxN],cnt = 0; ll d[maxN]; int pa[MLog+1][maxN],h[maxN]; pair<int,int> E[maxN]; void pre_dfs(int u,int par){ st[u] = ++cnt; h[u] = h[par] + 1; pa[0][u] = par; for(pair<ll,ll> pp : adj[u]){ ll v = pp.F, w = pp.S; if(v==par) continue; d[v] = d[u] + w; pre_dfs(v,u); } fn[u] = cnt; } void build_lca(){ for(int i = 1;i<=MLog;i++){ for(int j = 1;j<=n;j++){ pa[i][j] = pa[i-1][pa[i-1][j]]; } } } int getlca(int u,int v){ if(h[u] > h[v]) swap(u,v); for(int i = MLog;i>=0;i--){ if(h[u] <= h[pa[i][v]]){ v = pa[i][v]; } } if(u==v) return u; for(int i = MLog;i>=0;i--){ if(pa[i][u] != pa[i][v]){ u = pa[i][u]; v = pa[i][v]; } } return pa[0][u]; } void sub12(){ for(int test = 1;test<=q;test++){ int i,r; cin >> i >> r; int u = E[i].F, v = E[i].S; if(h[u] > h[v]) swap(u,v); if(st[v] <= st[r] && fn[r] <= fn[v]){ ll ans = 1e17; for(int j = 1;j<=s;j++){ if(st[v] <= st[c[j]] && fn[c[j]] <= fn[v]){ ans = min(ans,d[r] + d[c[j]] - 2*d[getlca(r,c[j])]); } } if(ans == 1e17){ cout << "oo" << '\n'; }else{ cout << ans << '\n'; } }else{ cout << "escaped" << '\n'; } } } void sub3(){ for(int test = 1;test<=q;test++){ int i,r; cin >> i >> r; int u = E[i].F, v = E[i].S; if(h[u] > h[v]) swap(u,v); if(st[v] <= st[r] && fn[r] <= fn[v]){ cout << 0 << '\n'; }else{ cout << "escaped" << '\n'; } } } void solve() { cin >> n >> s >> q >> e; 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].F = u; E[i].S = v; } for(int i = 1; i<=s; i++) { cin >> c[i]; } pre_dfs(e,0); build_lca(); if(q*s<=5e7) { sub12(); return; } if(s==n) { sub3(); return; } } int main() { ios_base::sync_with_stdio(false); cin.tie(0), cout.tie(0); //freopen("inp.txt","r",stdin); //freopen("out.txt","w",stdout); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...