ダイクストラ
vector<vector<pair<int,int»>の形のグラフを投入
v[i]にあるvector<pair<int,int»をpとしたときpにはiからの{行き先、距離}を記録する
ds(グラフ,スタート地点)
スタート視点からの距離が記録されたvectorが帰ってくる
負の重みを持つ辺を入れてはいけない
vector<long long> ds(vector<vector<pair<long long,long long>>>& v,long long str){
long long inf = 1e9;
vector<long long> ans(v.size(),inf);
ans[str] = 0;
priority_queue<pair<long long,long long>,vector<pair<long long,long long>>,greater<pair<long long,long long>>> q;
q.push({0,str});
while(q.size()!=0){
long long cos = q.top().first;
long long pos = q.top().second;
q.pop();
if(cos > ans[pos])continue;
for(pair<long long,long long> i : v[pos]){
if(ans[i.first] > cos + i.second){
ans[i.first] = cos + i.second;
q.push({cos+i.second,i.first});
}
}
}
return ans;
}