Submission #00022
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #include <bits/stdc++.h> using namespace std; struct edge { int to, cost; }; typedef vector< vector< edge > > Graph; template < typename T = int > T Dijkstra(Graph &g, int s, int t) { typedef pair< T, int > Pi; vector< T > min_cost(g.size(), numeric_limits< T >::max()); priority_queue< Pi, vector< Pi >, greater< Pi > > que; que.emplace(0, s); min_cost[s] = 0; while (!que.empty()) { auto p = que.top(); que.pop(); if (p.second == t) return (p.first); if (p.first > min_cost[p.second]) continue ; for (auto &e : g[p.second]) { if (p.first + e.cost >= min_cost[e.to]) continue ; min_cost[e.to] = p.first + e.cost; que.emplace(min_cost[e.to], e.to); } } return (-1); } int main() { int N, M, X; cin >> N >> M >> X; Graph g(N); while (M--) { int S, T, X; cin >> S >> T >> X; --S, --T; g[S].push_back((edge) {T, X}); g[T].push_back((edge) {S, X}); } auto get = Dijkstra(g, 0, N - 1) * 2; if (get >= X || get < 0) puts ( "sleep" ); else cout << get << endl; } |
ステータス
項目 | データ |
---|---|
問題 | 0003 - 眠れる獅子の肝試し |
ユーザー名 | ei1333 |
投稿日時 | 2017-05-05 20:11:49 |
言語 | C++11 |
状態 | Accepted |
得点 | 100 |
ソースコード長 | 1093 Byte |
最大実行時間 | 577 ms |
最大メモリ使用量 | 54780 KB |
セット
セット | 得点 | Cases | |
---|---|---|---|
1 | ALL | 100 / 100 | * |
テストケース
ファイル名 | 状態 | 実行時間 | メモリ使用量 | # |
---|---|---|---|---|
1.in | AC | 15 ms | 480 KB |
1
|
2.in | AC | 17 ms | 464 KB |
1
|
3.in | AC | 20 ms | 568 KB |
1
|
4.in | AC | 17 ms | 1132 KB |
1
|
5.in | AC | 80 ms | 6508 KB |
1
|
6.in | AC | 577 ms | 54780 KB |
1
|