Submission #60656
ソースコード
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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | #include <bits/stdc++.h> //{ START using namespace std; #define int int64_t #define rep(i, a, n) for (int i = (a); i < (n); ++i) #define reps(i, a, n) for (int i = (a); i > (n); --i) #define arep(i, x) for (auto &&i : (x)) #define irep(i, x) for (auto i = (x).begin(); i != (x).end(); ++i) #define rirep(i, x) for (auto i = (x).rbegin(); i != (x).rend(); ++i) //降順はgreater<T>() #define all(x) (x).begin(), (x).end() #define rv(s) reverse((s).begin(), (s).end()) // gcd lcmはそのままok #define gcd(a, b) __gcd(a, b) #define bits(n) (1LL << (n)) #define pcnt(x) __builtin_popcountll(x) //配列内等要素削除 #define unique(x) (x).erase(unique((x).begin(), (x).end()), (x).end()) #define Fixed(n) fixed << setprecision(n) //総和 #define sowa(n) ((n) * ((n) + 1)) / 2 #define pb(x, a) (x).push_back(a) #define fb(x, a) (x).push_front(a) #define eb(x, a) (x).emplace_back(a) #define cauto const auto & using P = pair< int , int >; using Graph = vector<vector<P>>; template < class T> //昇順 using min_heap = priority_queue<T, vector<T>, greater<T>>; template < class T> //降順 using max_heap = priority_queue<T>; template < class A, class B> using umap = unordered_map<A, B>; template < class A> using uset = unordered_set<A>; template < typename A, size_t N, typename T> void Fill(A (&array)[N], const T &val) { //多次元初期化 std::fill((T *)array, (T *)(array + N), val); } template < class A, class B> bool chmax(A &a, const B &b) { //最大値更新 返り値はbool if (a < b) { a = b; return 1; } return 0; } template < class A, class B> bool chmin(A &a, const B &b) { //最小値更新 返り値はbool if (b < a) { a = b; return 1; } return 0; } int dx[4] = {1, 0, -1, 0}; int dy[4] = {0, 1, 0, -1}; constexpr int INF = 0x3f3f3f3f; constexpr int LINF = 0x3f3f3f3f3f3f3f3fLL; constexpr int mod1 = 1e9 + 7; constexpr int mod2 = 998244353; //} END Graph graph; vector< int > min_cost; void Dijkstra( int s) { //昇順でfirstを小さい方から取る min_heap<P> que; min_cost[s] = 0; que.emplace(0, s); while (!que.empty()) { int now_cost, now_node; tie(now_cost, now_node) = que.top(); que.pop(); if (min_cost[now_node] < now_cost) // queの値より新しいcostの方が小さいとき見ない continue ; rep(i, 0, graph[now_node].size()) { int next_node, next_cost; tie(next_node, next_cost) = graph[now_node][i]; if (chmin(min_cost[next_node], min_cost[now_node] + next_cost)) //最短経路の更新 { //最短経路更新 que.emplace(min_cost[next_node], next_node); } } } } signed main( void ) { cin.tie(nullptr); ios_base::sync_with_stdio( false ); int V, E; cin >> V >> E; min_cost.resize(V + 1, INF); graph.resize(V + 1); rep(i, 0, E) { int a, b, c; cin >> a >> b >> c; --a, --b; graph[a].emplace_back(b, c); //グラフの構築 graph[b].emplace_back(a, c); } Dijkstra(0); cout << min_cost[V - 1] << '\n' ; return 0; } |
ステータス
項目 | データ |
---|---|
問題 | 1257 - ダイクストラ大好き厨とコーナーテストケース |
ユーザー名 | immunity |
投稿日時 | 2020-07-11 15:06:23 |
言語 | C++17 |
状態 | Accepted |
得点 | 5 |
ソースコード長 | 3196 Byte |
最大実行時間 | 136 ms |
最大メモリ使用量 | 24408 KB |
セット
セット | 得点 | Cases | |
---|---|---|---|
1 | ALL | 5 / 5 | * |
テストケース
ファイル名 | 状態 | 実行時間 | メモリ使用量 | # |
---|---|---|---|---|
corner_input.txt | AC | 116 ms | 17996 KB |
1
|
input01.txt | AC | 136 ms | 20028 KB |
1
|
input02.txt | AC | 81 ms | 16432 KB |
1
|
input03.txt | AC | 58 ms | 17304 KB |
1
|
input04.txt | AC | 86 ms | 22252 KB |
1
|
input05.txt | AC | 73 ms | 24408 KB |
1
|
sample_input.txt | AC | 25 ms | 13884 KB |
1
|