Submission #867498

#TimeUsernameProblemLanguageResultExecution timeMemory
86749812345678Valley (BOI19_valley)C++17
23 / 100
98 ms20048 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long const int nx=1e5+5; ll n, s, q, e, u, v, w, mn[nx], ans[nx], x, y; vector<tuple<int, int, int>> d[nx]; vector<pair<int, int>> t[nx]; bool pw[nx], dp[nx]; void dfs(int u, int p) { for (auto [v, w, i]:d[u]) { if (v==p) continue; dfs(v, u); mn[u]=min(mn[u], mn[v]+w); } if (pw[u]) mn[u]=0; } void dfs2(int u, int p) { for (auto [x, y]:t[u]) ans[y]=dp[x]?mn[u]:-1; for (auto [v, w, i]:d[u]) { if (v==p) continue; dp[i]=1; dfs2(v, u); dp[i]=0; } } int main() { cin.tie(NULL)->sync_with_stdio(false); cin>>n>>s>>q>>e; for (int i=1; i<=n-1; i++) cin>>u>>v>>w, d[u].push_back({v, w, i}), d[v].push_back({u, w, i}); for (int i=1; i<=n; i++) mn[i]=1e18; for (int i=0; i<s; i++) cin>>x, pw[x]=1; for (int i=0; i<q; i++) cin>>x>>y, t[y].push_back({x, i}); dfs(e, e); dfs2(e, e); for (int i=0; i<q; i++) { //cout<<"here"<<' '<<ans[i]<<'\n'; if (ans[i]==-1) cout<<"escaped\n"; else if (ans[i]==1e18) cout<<"oo\n"; else cout<<ans[i]<<'\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...