제출 #1292610

#제출 시각아이디문제언어결과실행 시간메모리
1292610nerrrminValley (BOI19_valley)C++20
36 / 100
3092 ms10040 KiB
#include<bits/stdc++.h>
#define endl '\n'
#define pb push_back
using namespace std;
const int maxn = 2e5 + 10;
void speed()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
}
long long n, s, q, e, a[maxn], b[maxn], w[maxn], is[maxn];
vector < pair < int, int>  > g[maxn];
int par[maxn];
long long block, ans, pos;
void dfs(int beg, int from, long long h)
{
    if(is[beg])ans = min(ans, h);
    if(beg == e)pos = 1;
    for (auto &[nb, index]: g[beg])
    {
        if(nb == from)continue;
        if(block == index)continue;
        dfs(nb, beg, h + w[index]);
    }
}

int main()
{
    speed();
    cin >> n >> s >> q >> e;
    for (int i = 1; i < n; ++ i)
    {
        cin >> a[i] >> b[i] >> w[i];
        g[a[i]].pb(make_pair(b[i], i));
        g[b[i]].pb(make_pair(a[i], i));
    }
    for (int i = 1; i <= s; ++ i)
    {
        int x;
        cin >> x;
        is[x] = 1;
    }
    for (int i = 1; i <= q; ++ i)
    {
        int ed, st;
        cin >> ed >> st;
        block = ed;
        pos = 0;
        ans = 1e17;
        dfs(st, -1, 0);
        if(pos)cout << "escaped" << endl;
        else if(ans != 1e17)cout << ans << endl;
        else cout << "oo" << endl;
    }
    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...