Submission #50116550


Source Code Expand

#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;
  }
}

Submission Info

Submission Time
Task A64 - Shortest Path 2
User blueberry1001
Language C++ 20 (gcc 12.2)
Score 1000
Code Size 1382 Byte
Status AC
Exec Time 190 ms
Memory 13732 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 1000 / 1000
Status
AC × 2
AC × 10
Set Name Test Cases
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
Case Name Status Exec Time Memory
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