結果
| 問題 |
No.160 最短経路のうち辞書順最小
|
| コンテスト | |
| ユーザー |
tsutaj
|
| 提出日時 | 2017-07-04 19:31:57 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,750 bytes |
| コンパイル時間 | 1,461 ms |
| コンパイル使用メモリ | 177,160 KB |
| 実行使用メモリ | 6,824 KB |
| 最終ジャッジ日時 | 2024-10-05 15:52:01 |
| 合計ジャッジ時間 | 2,505 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 8 WA * 18 |
ソースコード
// 基本テンプレート (縮小版)
#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for(int (i)=(a); (i)<(n); (i)++)
#define repq(i,a,n) for(int (i)=(a); (i)<=(n); (i)++)
#define repr(i,a,n) for(int (i)=(a); (i)>=(n); (i)--)
#define int long long
template<typename T> void chmax(T &a, T b) {a = max(a, b);}
template<typename T> void chmin(T &a, T b) {a = min(a, b);}
template<typename T> void chadd(T &a, T b) {a = a + b;}
typedef pair<int, int> pii;
typedef long long ll;
constexpr ll INF = 1001001001001001LL;
constexpr ll MOD = 1000000007LL;
int N, M, S, G;
int dist[210];
int E[210][210];
signed main() {
memset(E, -1, sizeof(E));
cin >> N >> M >> S >> G;
rep(i,0,M) {
int a, b, c; cin >> a >> b >> c;
E[a][b] = c;
E[b][a] = c;
}
fill(dist, dist+N, INF);
dist[S] = 0;
priority_queue< pii, vector<pii>, greater<pii> > q;
q.push( pii(0, S) );
while(!q.empty()) {
pii cur = q.top(); q.pop();
int d = cur.first, pt = cur.second;
repr(i,N-1,0) {
if(i == pt || E[i][pt] < 0) continue;
if(dist[i] > dist[pt] + E[i][pt]) {
dist[i] = dist[pt] + E[i][pt];
q.push( pii(dist[i], i) );
}
}
}
vector<int> ans;
int d = dist[G], pt = G;
ans.push_back(pt);
while(d != 0) {
rep(i,0,N) {
if(i == pt || E[i][pt] < 0) continue;
if(d - dist[i] == E[i][pt]) {
pt = i;
d = dist[i];
ans.push_back(i);
break;
}
}
}
reverse(ans.begin(), ans.end());
rep(i,0,ans.size()) cout << (i==0 ? "" : " ") << ans[i];
cout << endl;
return 0;
}
tsutaj