#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define x first
#define y second
ll N, M, T[100005], L[100005], R[100005], C[100005], D[100005];
vector<ll> G[100005];
int main(){
cin.tie(0) -> sync_with_stdio(0);
cin >> N >> M;
fill(D, D + 100005, 1e18);
priority_queue<pair<ll, ll>> PQ;
for(ll i = 1; i <= M; i++){
cin >> T[i] >> L[i] >> R[i] >> C[i];
if(L[i] == 1){
D[i] = C[i]; PQ.push({-C[i], i});
}
}
for(ll i = 1; i <= M; i++){
for(ll j = 1; j <= M; j++){
if(R[i] - abs(T[i] - T[j]) >= L[j] - 1){
G[i].push_back(j);
}
}
}
ll Ans = 1e18;
while(!PQ.empty()){
ll c = -PQ.top().x, u = PQ.top().y; PQ.pop();
if(D[u] < c) continue;
if(R[u] == N){
Ans = min(Ans, c);
}
for(auto v : G[u]){
if(D[v] <= D[u] + C[v]) continue;
D[v] = D[u] + C[v];
PQ.push({-D[v], v});
}
}
cout << (Ans == 1e18 ? -1 : Ans);
}
# | 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... |