結果
| 問題 | No.160 最短経路のうち辞書順最小 |
| コンテスト | |
| ユーザー |
task4233
|
| 提出日時 | 2019-01-10 23:38:16 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 832 bytes |
| コンパイル時間 | 1,372 ms |
| コンパイル使用メモリ | 166,216 KB |
| 実行使用メモリ | 9,672 KB |
| 最終ジャッジ日時 | 2024-11-24 18:55:36 |
| 合計ジャッジ時間 | 2,464 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 WA * 1 |
| other | AC * 8 WA * 18 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
struct Edge{
int to,cost;
};
vector<Edge> e[201010];
int d[201010];
int pre[201010];
int main(){
int n,m,s,g;
cin>>n>>m>>s>>g;
int u,v,c;
for(int i=0;i<m;++i){
cin>>u>>v>>c;
e[v].push_back(Edge{u,c});
e[u].push_back(Edge{v,c});
}
fill_n(d, 201010, 1e9+1);
priority_queue<int, vector<int>, greater<int>> p_q;
p_q.push(g);
d[g] = 0;
while(!p_q.empty()){
int fr=p_q.top();p_q.pop();
for(auto &&t: e[fr]){
if (d[t.to] > d[fr] + t.cost) {
d[t.to] = d[fr] + t.cost;
pre[t.to] = fr;
p_q.push(t.to);
}
}
}
/*
for (int i=0;i<n;++i){
cout << d[i] << endl;
cout << pre[i] <<endl<<endl;
}
*/
while (g != s){
cout << s << " ";
s = pre[s];
}
cout << s << endl;
return 0;
}
task4233