제출 #1347113

#제출 시각아이디문제언어결과실행 시간메모리
1347113nguyenkhangninh99치료 계획 (JOI20_treatment)C++20
35 / 100
3092 ms4336 KiB
#include<bits/stdc++.h>
using namespace std;

#define int long long
signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    int n, m; cin >> n >> m;

    vector<array<int, 4>> proj(m);
    for(int i = 0; i < m; i++){
        cin >> proj[i][0] >> proj[i][1] >> proj[i][2] >> proj[i][3];
        proj[i][2] += 1; 
    }

    vector<int> dist(m, 1e18);
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;


    for(int i = 0; i < m; i++){
        if(proj[i][1] == 1){
            dist[i] = proj[i][3];
            pq.push({dist[i], i});
        }
    }

    int ans = 1e18;
    while(!pq.empty()){
        auto [cur, u] = pq.top();
        pq.pop();

        if(cur > dist[u]) continue;
        if(proj[u][2] == n + 1) ans = min(ans, cur);

        for(int v = 0; v < m; v++){
            if(u == v) continue;
            if(proj[u][2] - proj[v][1] >= abs(proj[u][0] - proj[v][0])){
                if(dist[v] > dist[u] + proj[v][3]){
                    dist[v] = dist[u] + proj[v][3];
                    pq.push({dist[v], v});
                }
            }
        }
    }
    cout << (ans == 1e18 ? -1 : ans);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...