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...