提出 #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
結果
AC × 2
AC × 10
セット名 テストケース
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