Submission #1305385

#TimeUsernameProblemLanguageResultExecution timeMemory
1305385vehamValley (BOI19_valley)C++20
0 / 100
139 ms7968 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<ll> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
struct edge{
    ll v;
    ll w;
};
bool operator<(edge a, edge b){return a.w > b.w;}
bool operator==(edge a, edge b){return make_pair(a.v,a.w) == make_pair(b.v,b.w);};
typedef vector<edge> ve;
typedef vector<ve> vve;
#define MAX 1e17

int main(){
    ll N,S,Q,E;
    cin >> N >> S >> Q >> E;
    E--;
    vi A(N-1),B=A,Sh(S),IS(N,0),I(Q),R(Q);
    vl W(N-1);
    vl W2(N-1);
    for(ll i = 0;i < N-1;i++){
        cin >> A[i] >> B[i] >> W[i];
        A[i]--,B[i]--;
        W2[min(A[i],B[i])] = W[i];
    }
    for(ll i = 0;i < S;i++){
        cin >> Sh[i];
        IS[--Sh[i]] = 1;
    }
    for(ll i = 0;i < Q;i++){
        cin >> I[i] >> R[i];
        I[i]--,R[i]--;
    }

    vl D(N,MAX);
    for(int i = 0;i < N;i++){
        if(IS[i]) D[i] = 0;
        else if(i != 0) D[i] = min(D[i],D[i-1]+W[i-1]);
    }
    for(int i = N-1;i >= 0;i--){
        if(IS[i]) D[i] = 0;
        else if(i != N-1) D[i] = min(D[i],D[i+1]+W[i]);
    }
    for(int q = 0;q < Q;q++){
        int sep = min(A[I[q]],B[I[q]]);
        if(R[q] <= sep == E <= sep){
            cout << "escaped\n";
            continue;
        }
        if(D[R[q]] == MAX){
            cout << "oo\n";
            continue;    
        }
        cout << D[R[q]] << '\n';
    }
    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...