Submission #4635897


Source Code Expand

#include<iostream>
#include<vector>
#include<algorithm>
#include<utility>
#include<unordered_map>
#include<queue>
#include<functional>

using namespace std;

using ll = long long int;
using pll = pair<ll, ll>;

int n, m;
struct Edge{
    ll cost, to;
    Edge(ll c, ll t) : cost(c), to(t){}
};
unordered_map<ll, vector<Edge>> g;
unordered_map<ll, ll> d;

ll get_id(ll p, ll c){
    return p + n * c;
}

void add_edge(ll p, ll q, ll c){
    g[get_id(p, c)].push_back({0, get_id(q, c)});
    g[get_id(q, c)].push_back({0, get_id(p, c)});
    g[get_id(p, c)].push_back({0, get_id(p, 0)});
    g[get_id(p, 0)].push_back({1, get_id(p, c)});
    g[get_id(q, c)].push_back({0, get_id(q, 0)});
    g[get_id(q, 0)].push_back({1, get_id(q, c)});
}

int main(){
    cin >> n >> m;
    for(int i = 0; i < m; i++){
        int p, q, c;
        cin >> p >> q >> c;
        add_edge(p, q, c);
    }
    priority_queue<pll, vector<pll>, greater<pll>> q;
    d[get_id(1, 0)] = 0;
    q.push({0, get_id(1, 0)});
    while(!q.empty()){
        auto from = q.top(); q.pop();
        for(auto&& t : g[from.second]){
            if(d.find(t.to) == d.end() || d[t.to] > d[from.second] + t.cost){
                d[t.to] = d[from.second] + t.cost;
                q.push({d[t.to], t.to});
            }
        }
    }
    if(d.find(get_id(n, 0)) == d.end()){
        cout << -1 << endl;
    }else{
        cout << d[get_id(n, 0)] << endl;
    }
    return 0;
}

Submission Info

Submission Time
Task E - Snuke's Subway Trip
User lucky3977
Language C++14 (GCC 5.4.1)
Score 600
Code Size 1498 Byte
Status AC
Exec Time 1104 ms
Memory 78192 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status AC
AC × 59
Set Name Test Cases
Sample
All 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, 29.txt, 30.txt, 31.txt, 32.txt, 33.txt, 34.txt, 35.txt, 36.txt, 37.txt, 38.txt, sample_01.txt, sample_02.txt, sample_03.txt, w1.txt, w10.txt, w11.txt, w12.txt, w13.txt, w14.txt, w15.txt, w16.txt, w17.txt, w18.txt, w2.txt, w3.txt, w4.txt, w5.txt, w6.txt, w7.txt, w8.txt, w9.txt
Case Name Status Exec Time Memory
01.txt AC 2 ms 256 KB
02.txt AC 461 ms 38684 KB
03.txt AC 984 ms 78192 KB
04.txt AC 449 ms 56692 KB
05.txt AC 787 ms 66292 KB
06.txt AC 300 ms 45684 KB
07.txt AC 371 ms 47092 KB
08.txt AC 966 ms 77556 KB
09.txt AC 448 ms 49396 KB
10.txt AC 457 ms 49396 KB
11.txt AC 540 ms 48952 KB
12.txt AC 203 ms 24540 KB
13.txt AC 361 ms 34440 KB
14.txt AC 557 ms 48580 KB
15.txt AC 406 ms 42272 KB
16.txt AC 503 ms 47272 KB
17.txt AC 652 ms 49064 KB
18.txt AC 274 ms 28264 KB
19.txt AC 497 ms 45596 KB
20.txt AC 760 ms 56948 KB
21.txt AC 1070 ms 75112 KB
22.txt AC 776 ms 58984 KB
23.txt AC 819 ms 63860 KB
24.txt AC 636 ms 55632 KB
25.txt AC 219 ms 23800 KB
26.txt AC 382 ms 34160 KB
27.txt AC 756 ms 57332 KB
28.txt AC 680 ms 56272 KB
29.txt AC 706 ms 56556 KB
30.txt AC 607 ms 49532 KB
31.txt AC 371 ms 34036 KB
32.txt AC 493 ms 46712 KB
33.txt AC 701 ms 57072 KB
34.txt AC 474 ms 42176 KB
35.txt AC 190 ms 24048 KB
36.txt AC 302 ms 29568 KB
37.txt AC 498 ms 44616 KB
38.txt AC 480 ms 42688 KB
sample_01.txt AC 1 ms 256 KB
sample_02.txt AC 1 ms 256 KB
sample_03.txt AC 1 ms 256 KB
w1.txt AC 549 ms 45348 KB
w10.txt AC 598 ms 56052 KB
w11.txt AC 232 ms 23560 KB
w12.txt AC 296 ms 30464 KB
w13.txt AC 496 ms 43336 KB
w14.txt AC 655 ms 59636 KB
w15.txt AC 204 ms 23644 KB
w16.txt AC 228 ms 24832 KB
w17.txt AC 278 ms 27904 KB
w18.txt AC 431 ms 36972 KB
w2.txt AC 544 ms 45376 KB
w3.txt AC 702 ms 58420 KB
w4.txt AC 543 ms 47284 KB
w5.txt AC 1104 ms 78176 KB
w6.txt AC 929 ms 66660 KB
w7.txt AC 802 ms 67444 KB
w8.txt AC 808 ms 65012 KB
w9.txt AC 907 ms 66548 KB