結果
問題 | No.807 umg tours |
ユーザー |
|
提出日時 | 2020-04-17 05:25:30 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 478 ms / 4,000 ms |
コード長 | 2,232 bytes |
コンパイル時間 | 1,503 ms |
コンパイル使用メモリ | 129,816 KB |
実行使用メモリ | 55,744 KB |
最終ジャッジ日時 | 2024-11-23 19:56:05 |
合計ジャッジ時間 | 6,996 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 26 |
ソースコード
#include <cstdio>#include <iostream>#include <string>#include <sstream>#include <stack>#include <algorithm>#include <cmath>#include <queue>#include <map>#include <set>#include <cstdlib>#include <bitset>#include <tuple>#include <assert.h>#include <deque>#include <bitset>#include <iomanip>#include <limits>#include <chrono>#include <random>#include <array>#include <unordered_map>#include <functional>#include <complex>#include <numeric>template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }constexpr long long MAX = 5100000;constexpr long long INF = 1LL << 60;constexpr int inf = 1 << 28;//constexpr long long mod = 1000000007LL;constexpr long long mod = 998244353LL;using namespace std;typedef unsigned long long ull;typedef long long ll;vector<ll> dijkstra(ll start, vector<vector<pair<int, ll>>>& graph) {vector<ll> dist(graph.size(), INF);dist[start] = 0;priority_queue<pair<ll, ll>, vector<pair<ll, ll>>, greater<pair<ll, ll>>> pq;vector<bool> used(dist.size(), false);pq.push(make_pair(0, start));while (!pq.empty()) {ll d, node;tie(d, node) = pq.top();pq.pop();if (used[node]) continue;used[node] = true;for (pair<ll, ll> element : graph[node]) {ll new_d, new_node;tie(new_node, new_d) = element;new_d += d;if (new_d < dist[new_node]) {dist[new_node] = new_d;pq.push(make_pair(dist[new_node], new_node));}}}return dist;}int main(){/*cin.tie(nullptr);ios::sync_with_stdio(false);*/int n, m; scanf("%d %d", &n, &m);vector<vector<pair<int, ll>>> g1(n), g2(n * 2);for (int i = 0; i < m; i++) {ll a, b, c; scanf("%lld %lld %lld", &a, &b, &c);a--; b--;g1[a].emplace_back(b, c);g1[b].emplace_back(a, c);g2[a].emplace_back(b, c);g2[b].emplace_back(a, c);g2[a + n].emplace_back(b + n, c);g2[b + n].emplace_back(a + n, c);g2[a].emplace_back(b + n, 0);g2[b].emplace_back(a + n, 0);}vector<ll> d1 = dijkstra(0, g1);vector<ll> d2 = dijkstra(0, g2);for (int i = 0; i < n; i++) {cout << d1[i] + min(d2[i + n], d2[i]) << "\n";}return 0;}