제출 #1361586

#제출 시각아이디문제언어결과실행 시간메모리
1361586mariza은하철도 (APIO24_train)C++20
0 / 100
603 ms57160 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){
	map<pair<ll,ll>,vector<pair<pair<ll,ll>,ll>>> g;
    vector<ll> z[n];
    z[0].push_back(0);
    for(ll i=0; i<m; i++){
        g[{x[i],a[i]}].push_back({{y[i],b[i]},c[i]});
        z[x[i]].push_back(a[i]);
        z[y[i]].push_back(b[i]);
    }
    for(ll i=0; i<n; i++){
        sort(z[i].begin(),z[i].end());
        for(ll j=1; j<z[i].size(); j++){
            g[{i,z[i][j-1]}].push_back({{i,z[i][j]},0});
        }
    }

    map<pair<ll,ll>,ll> dist;
    dist[{0,0}]=0;
    map<pair<ll,ll>,bool> vis;
    priority_queue<pair<ll,pair<ll,ll>>> q; q.push({0,{0,0}});

    while(!q.empty()){
        pair<ll,ll> curr=q.top().second;
        q.pop();

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

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

    if(dist[{n-1,z[n-1].back()}]==INF) return -1;
    else return dist[{n-1,z[n-1].back()}];
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…