結果

問題 No.1812 Uribo Road
ユーザー HaaHaa
提出日時 2022-01-14 22:32:34
言語 C++14
(gcc 12.3.0 + boost 1.83.0)
結果
TLE  
実行時間 -
コード長 1,538 bytes
コンパイル時間 2,052 ms
コンパイル使用メモリ 190,476 KB
実行使用メモリ 917,792 KB
最終ジャッジ日時 2024-11-20 12:18:21
合計ジャッジ時間 69,842 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
186,788 KB
testcase_01 AC 2 ms
13,632 KB
testcase_02 AC 3 ms
141,772 KB
testcase_03 AC 32 ms
33,956 KB
testcase_04 AC 2 ms
13,768 KB
testcase_05 AC 2 ms
126,432 KB
testcase_06 AC 3 ms
13,636 KB
testcase_07 AC 2 ms
13,764 KB
testcase_08 AC 56 ms
121,480 KB
testcase_09 AC 127 ms
136,336 KB
testcase_10 AC 46 ms
7,096 KB
testcase_11 AC 21 ms
6,816 KB
testcase_12 TLE -
testcase_13 AC 75 ms
9,896 KB
testcase_14 AC 179 ms
16,208 KB
testcase_15 AC 1,307 ms
27,776 KB
testcase_16 TLE -
testcase_17 TLE -
testcase_18 TLE -
testcase_19 TLE -
testcase_20 TLE -
testcase_21 TLE -
testcase_22 TLE -
testcase_23 AC 247 ms
16,344 KB
testcase_24 AC 3 ms
6,820 KB
testcase_25 AC 27 ms
6,820 KB
testcase_26 AC 18 ms
6,816 KB
testcase_27 AC 4,559 ms
27,780 KB
testcase_28 AC 53 ms
6,816 KB
testcase_29 AC 2 ms
6,820 KB
testcase_30 AC 118 ms
6,820 KB
testcase_31 TLE -
testcase_32 AC 31 ms
6,820 KB
testcase_33 MLE -
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp: In function 'int main()':
main.cpp:54:33: warning: narrowing conversion of 'i' from 'll' {aka 'long long int'} to 'int' [-Wnarrowing]
   54 |         g[a].push_back(edge{b,c,i});
      |                                 ^
main.cpp:55:33: warning: narrowing conversion of 'i' from 'll' {aka 'long long int'} to 'int' [-Wnarrowing]
   55 |         g[b].push_back(edge{a,c,i});
      |                                 ^

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef pair<ll,ll> P;
typedef vector<ll> VI;
typedef vector<VI> VVI;
#define REP(i,n) for(ll i=0;i<(n);i++)
#define ALL(v) v.begin(),v.end()
template<typename T> bool chmax(T &x, const T &y) {return (x<y)?(x=y,true):false;};
template<typename T> bool chmin(T &x, const T &y) {return (x>y)?(x=y,true):false;};
constexpr ll MOD=1000000007;
constexpr ll INF=2e18;

int n, m, k;

struct edge { int to, cost, id; };
vector<edge> g[21000];
unordered_map<int,ll> d;
unordered_map<int,int> ri;

void dijkstra(int s){
    priority_queue<P,vector<P>,greater<P>> que;
    d[s]=0;
    que.push({0,s});
    while(!que.empty()){
        P p=que.top();
        que.pop();
        int v=p.second/(1<<k);
        int w=p.second%(1<<k);
        if(d[p.second]<p.first)
            continue;
        for(auto e:g[v]){
            int to=e.to*(1<<k)+w;
            if(ri[e.id]>0)
                to|=(1<<(ri[e.id]-1));
            if(d.find(to)==d.end())
                d[to]=INF;
            if(d[to]>d[p.second]+e.cost){
                d[to]=d[p.second]+e.cost;
                que.push({d[to],to});
            }
        }
    }
}

int main(){
    cin >> n >> m >> k;
    VI r(k); REP(i,k) cin >> r[i];
    REP(i,k) ri[r[i]-1]=i+1;
    int a, b, c;
    REP(i,m){
        cin >> a >> b >> c;
        a--, b--;
        g[a].push_back(edge{b,c,i});
        g[b].push_back(edge{a,c,i});
    }
    dijkstra(0);
    int p=(n-1)*(1<<k)+(1<<k)-1;
    cout << d[p] << endl;
    return 0;
}
0