#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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |