提出 #50116550
ソースコード 拡げる
#include<bits/stdc++.h> using namespace std; //&は「参照渡し」調べてみよう vector<long long>dijkstra(vector<vector<pair<int,long long>>>&g,int start){ vector<long long>dist(g.size(),10000000000); dist[start]=0; priority_queue<pair<long long,int>,vector<pair<long long,int>>,greater<pair<long long,int>>>pq; pq.push({0,start}); //pq.size()が1以上の間繰り返す while(pq.size()){ //dには距離が、posには場所が入る(autoでpairを崩して(?)受け取るのすごい便利だよ!!) auto[d,pos] = pq.top();pq.pop(); //dが最短距離じゃなかったらcontinue if(d>dist[pos])continue; //これも上と同じ、まとめて取り出す! for(auto[to,cost]:g[pos]){ //最短距離を更新できなかったらcontinue if(dist[to]<dist[pos]+cost)continue; dist[to]=dist[pos]+cost; pq.push({dist[to],to}); } } return dist; } int main(){ int n,m;cin >> n >> m; //pairのfirstが行先、secondがコスト vector<vector<pair<int,long long>>>g(n); for(int i = 0;i<m;i++){ int a,b,c;cin >> a >> b >> c; a--,b--; g[a].push_back({b,c}); g[b].push_back({a,c}); } vector<long long>ans = dijkstra(g,0); for(int i = 0;i<n;i++){ if(ans[i]<10000000000)cout<< ans[i] <<endl; else cout << -1 << endl; } }
提出情報
提出日時 | |
---|---|
問題 | A64 - Shortest Path 2 |
ユーザ | blueberry1001 |
言語 | C++ 20 (gcc 12.2) |
得点 | 1000 |
コード長 | 1382 Byte |
結果 | AC |
実行時間 | 190 ms |
メモリ | 13732 KiB |
ジャッジ結果
セット名 | Sample | All | ||||
---|---|---|---|---|---|---|
得点 / 配点 | 0 / 0 | 1000 / 1000 | ||||
結果 |
|
|
セット名 | テストケース |
---|---|
Sample | sample00.txt, sample01.txt |
All | 00.txt, 01_may_forget_continue.txt, 02_may_use_max_heap.txt, 03_may_use_max_heap.txt, 04.txt, 05.txt, 06.txt, 07.txt, sample00.txt, sample01.txt |
ケース名 | 結果 | 実行時間 | メモリ |
---|---|---|---|
00.txt | AC | 43 ms | 7008 KiB |
01_may_forget_continue.txt | AC | 164 ms | 13732 KiB |
02_may_use_max_heap.txt | AC | 126 ms | 10420 KiB |
03_may_use_max_heap.txt | AC | 160 ms | 10700 KiB |
04.txt | AC | 55 ms | 5008 KiB |
05.txt | AC | 111 ms | 8440 KiB |
06.txt | AC | 1 ms | 3536 KiB |
07.txt | AC | 190 ms | 11620 KiB |
sample00.txt | AC | 1 ms | 3500 KiB |
sample01.txt | AC | 1 ms | 3548 KiB |