Submission #1305389

#TimeUsernameProblemLanguageResultExecution timeMemory
1305389vehamValley (BOI19_valley)C++20
0 / 100
139 ms10272 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 DL(N,MAX),DR=DL; vl DLS(N,MAX),DRS=DLS; for(int i = 0;i < N;i++){ if(IS[i]) DL[i] = 0, DLS[i] = 0; else if(i != 0 && DL[i-1]+W[i-1] < DL[i]) DL[i] = DL[i-1]+W[i-1], DLS[i] = DLS[i-1]+1; } for(int i = N-1;i >= 0;i--){ if(IS[i]) DR[i] = 0, DRS[i] = 0; else if(i != N-1 && DR[i+1]+W[i] < DR[i]) DR[i] = DR[i+1]+W[i], DRS[i] = DRS[i+1]+1; } for(int q = 0;q < Q;q++){ ll sep = min(A[I[q]],B[I[q]]); if(R[q] <= sep == E <= sep){ cout << "escaped\n"; continue; } ll ans = MAX; if(DRS[R[q]] == 0) ans = 0; else{ if(clamp(sep,R[q],R[q]+DRS[R[q]]-1) != sep) ans = min(ans,DR[R[q]]); if(clamp(sep,R[q]-DLS[R[q]],R[q]-1) != sep) ans = min(ans,DL[R[q]]); } if(ans == MAX){ cout << "oo\n"; continue; } cout << ans << '\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...