Submission #1361581

#TimeUsernameProblemLanguageResultExecution timeMemory
1361581marizaTrain (APIO24_train)C++20
5 / 100
1094 ms12232 KiB
#include "train.h"
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
const ll INF=1e18;

long long solve(int n, int m, int w, vector<int> t, vector<int> x, vector<int> y, vector<int> a, vector<int> b, vector<int> c, vector<int> l, vector<int> r){
	vector<pair<ll,ll>> g[m+2];
    for(ll i=0; i<m; i++){
        for(ll j=0; j<m; j++){
            if(y[i]==x[j] && b[i]<=a[j]){
                ll cw=c[j];
                for(ll k=0; k<w; k++){
                    if(b[i]<l[k] && r[k]<a[j]) cw+=t[y[i]];
                }
                g[i+1].push_back({j+1,cw});
            }
        }
    }
    for(ll i=0; i<m; i++){
        if(x[i]==0){
            ll cw=c[i];
            for(ll k=0; k<w; k++){
                if(r[k]<a[i]) cw+=t[0];
            }
            g[0].push_back({i+1,cw});
        }
        if(y[i]==n-1){
            ll cw=0;
            for(ll k=0; k<w; k++){
                if(b[i]<l[k]) cw+=t[n-1];
            }
            g[i+1].push_back({m+1,cw});
        }
    }

    ll dist[m+2]={};
    for(ll i=1; i<=m+1; i++){
        dist[i]=INF;
    }
    bool vis[m+2]={};
    priority_queue<pair<ll,ll>> q; q.push({0,0});

    while(!q.empty()){
        ll curr=q.top().second;
        q.pop();

        if(vis[curr]) continue;
        vis[curr]=1;

        for(auto nxt:g[curr]){
            if(dist[nxt.first]>dist[curr]+nxt.second){
                dist[nxt.first]=dist[curr]+nxt.second;
                q.push({-dist[nxt.first],nxt.first});
            }
        }
    }

    if(dist[m+1]==INF) return -1;
    else return dist[m+1];
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...