結果

問題 No.807 umg tours
ユーザー 25__toma25__toma
提出日時 2019-03-24 04:59:17
言語 C++14
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 484 ms / 4,000 ms
コード長 1,660 bytes
コンパイル時間 2,034 ms
コンパイル使用メモリ 180,140 KB
実行使用メモリ 20,204 KB
最終ジャッジ日時 2024-05-02 23:42:23
合計ジャッジ時間 8,650 ms
ジャッジサーバーID
(参考情報)
judge1 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
5,248 KB
testcase_01 AC 2 ms
5,376 KB
testcase_02 AC 2 ms
5,376 KB
testcase_03 AC 3 ms
5,376 KB
testcase_04 AC 2 ms
5,376 KB
testcase_05 AC 2 ms
5,376 KB
testcase_06 AC 2 ms
5,376 KB
testcase_07 AC 3 ms
5,376 KB
testcase_08 AC 2 ms
5,376 KB
testcase_09 AC 2 ms
5,376 KB
testcase_10 AC 2 ms
5,376 KB
testcase_11 AC 275 ms
14,652 KB
testcase_12 AC 268 ms
12,832 KB
testcase_13 AC 383 ms
16,260 KB
testcase_14 AC 154 ms
9,040 KB
testcase_15 AC 126 ms
8,112 KB
testcase_16 AC 396 ms
18,092 KB
testcase_17 AC 474 ms
20,000 KB
testcase_18 AC 474 ms
20,052 KB
testcase_19 AC 484 ms
20,204 KB
testcase_20 AC 290 ms
12,196 KB
testcase_21 AC 303 ms
12,504 KB
testcase_22 AC 124 ms
7,296 KB
testcase_23 AC 96 ms
6,528 KB
testcase_24 AC 293 ms
15,616 KB
testcase_25 AC 471 ms
20,100 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include"bits/stdc++.h"

using namespace std;
using ll = long long;
using ld = long double;
using pii = pair<int, int>;
using pll = pair<ll, ll>;

#define FOR(k,m,n) for(ll (k)=(m);(k)<(n);(k)++)
#define REP(i,n) FOR((i),0,(n))
#define WAITING(str) int str;std::cin>>str;
#define DEBUGING(str) cout<< #str << " " str<<endl

constexpr int INF = (1 << 30);
constexpr ll INFL = (1ll << 60);
constexpr ll MOD = 1000000007;// 10^9+7

struct Edge { ll to, cost; };
typedef pair<ll, ll> P;

ll N, M;
vector<vector<Edge>> G;
vector<ll> d, d2;

void dijkstra(int s) {
	priority_queue<P, vector<P>, greater<P>> que;
	d = vector<ll>(N, INFL);
	d[s] = 0;
	que.push({ 0,s });

	while (!que.empty()) {
		P p = que.top(); que.pop();
		int v = p.second;
		if (d[v] < p.first)continue;

		for (auto e : G[v])if (d[e.to] > d[v] + e.cost) {
			d[e.to] = d[v] + e.cost;
			que.push({ d[e.to],e.to });
		}
	}
}

void dijkstra2(int s) {
	priority_queue<P, vector<P>, greater<P>> que;
	d2 = vector<ll>(N, INFL);
	d2[s] = 0;
	que.push({ 0,s });

	while (!que.empty()) {
		P p = que.top(); que.pop();
		int v = p.second;
		if (d[v] < p.first)continue;

		for (auto e : G[v]) {
			ll use0 = d[v];
			ll not0 = d2[v] + e.cost;
			ll score = min(use0, not0);
			if (d2[e.to] > score) {
				d2[e.to] = score;
				que.push({ d2[e.to],e.to });
			}
		}
	}
}

int main()
{
	cin >> N >> M;
	G.resize(N);
	REP(i, M) {
		ll a, b, c;
		cin >> a >> b >> c;
		a--; b--;
		G[a].push_back({ b,c });
		G[b].push_back({ a,c });
	}

	dijkstra(0);
	dijkstra2(0);

	REP(i, N)cout << d[i] + d2[i] << endl;


	return 0;
}
0