結果
| 問題 |
No.807 umg tours
|
| コンテスト | |
| ユーザー |
🍮かんプリン
|
| 提出日時 | 2019-08-27 16:03:22 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,690 bytes |
| コンパイル時間 | 2,021 ms |
| コンパイル使用メモリ | 188,980 KB |
| 実行使用メモリ | 20,920 KB |
| 最終ジャッジ日時 | 2024-11-15 20:48:02 |
| 合計ジャッジ時間 | 9,718 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 22 WA * 4 |
ソースコード
#include "bits/stdc++.h"
#define ALL(obj) (obj).begin(),(obj).end()
#define RALL(obj) (obj).rbegin(),(obj).rend()
#define REP(i, n) for(int i = 0; i < (int)(n); i++)
#define REPR(i, n) for(int i = (int)(n); i >= 0; i--)
#define FOR(i,n,m) for(int i = (int)(n); i < int(m); i++)
using namespace std;
typedef long long ll;
const int MOD = 1e9 + 7;
const int INF = MOD - 1;
const ll LLINF = 4e18;
// dijkstra法
struct edge { int to, cost; };
vector<vector<edge>> G;//グラフ
vector<vector<int>> d;//sからの距離(INFで初期化)
void dijkstra(int s) {
priority_queue<tuple<int, int,int>, vector<tuple<int, int, int>>, greater<tuple<int, int, int>>> pq;
d[s][0] = d[s][1] = 0;
pq.push(tuple<int, int, int>(0, 0, s));
pq.push(tuple<int, int, int>(0, 1, s));
while (!pq.empty()) {
tuple<int, int, int> p = pq.top(); pq.pop();
int v = get<2>(p);
if (d[v][get<1>(p)] < get<0>(p)) continue;
for (edge e : G[v])
{
if (d[e.to][0] > d[v][0] + e.cost) {
d[e.to][0] = d[v][0] + e.cost;
pq.push({d[e.to][0],0, e.to});
}
if (d[e.to][1] > d[v][0] || d[e.to][1] > d[v][1] + e.cost) {
d[e.to][1] = min(d[v][0],d[v][1] + e.cost);
pq.push({d[e.to][1],1, e.to});
}
}
}
}
int main() {
int n, m; cin >> n >> m;
G.resize(n);
d.resize(n,vector<int>(2,INF));
REP(i, m) {
int a, b, c; cin >> a >> b >> c;
a--; b--;
G[a].push_back({b,c});
G[b].push_back({a,c});
}
dijkstra(0);
REP(i, n) {
cout << d[i][0] + d[i][1] << endl;
}
getchar(); getchar();
}
🍮かんプリン