第7回日本情報オリンピック 予選(過去問)から、その提出コードの解答例です。
AtCoderとは、コンテストを通じて、プログラミングやアルゴリズムを学習するサービスです。
atcoder.jp
プログラミングコンテストとは、「与えられた問題をいかに素早く、正確に」解くことができるかを競うものです。
「競技プログラミング」を略して、「競プロ」などと呼ばれています。
#F - 船旅
僕が作成、提出したコードは、以下のとおりです。
/* AtCoder Problems in C++ #F - 船旅 https://atcoder.jp/contests/joi2008yo/tasks/joi2008yo_f 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; #define INF 100000000 using p=pair<int,int>; vector<p> vp[110]; int n; int dijkstra(int i,int j){ vector<int> v(n,INF); v[i]=0; priority_queue<p,vector<p>,greater<p>> q; q.push({0,i}); while(!(q.empty())){ p pp=q.top(); q.pop(); int num=pp.second; for(auto x : vp[num]){ if(v[num]+x.first<v[x.second]){ v[x.second]=v[num]+x.first; q.push({v[x.second],x.second}); } } } if(v[j]==INF){ return -1; }else{ return v[j]; } } int main(void){ int k; cin>>n>>k; for(int i=0;i<k;i++){ int j; cin>>j; if(j==0){ int a,b; cin>>a>>b; cout<<dijkstra(a-1,b-1)<<endl; }else{ int a,b,c; cin>>a>>b>>c; vp[a-1].push_back({c,b-1}); vp[b-1].push_back({c,a-1}); } } return 0; }