답안 #949508

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
949508 2024-03-19T09:59:24 Z artixkrishna Commuter Pass (JOI18_commuter_pass) C++14
100 / 100
416 ms 33220 KB
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;

vector<pair<ll, ll>> graph[100001];
ll du[100001], dv[100001], ds[100001], dp[2][100001], ans;
bool visited[100001];

void dijkstra1(ll start, ll arr[]) {
	fill(visited, visited + 100001, false);

	priority_queue<pair<ll, ll>> pq;
	pq.push({0, start});
	while (!pq.empty()) {
		ll c, node;
		tie(c, node) = pq.top();
		pq.pop();

		if (!visited[node]) {
			arr[node] = -c;
			visited[node] = true;
			for (auto &i : graph[node]) pq.push({c - i.second, i.first});
		}
	}
}

void dijkstra2(ll start, ll end) {
	fill(dp[0], dp[0] + 100001, LLONG_MAX / 2);
	fill(dp[1], dp[1] + 100001, LLONG_MAX / 2);
	fill(visited, visited + 100001, false);

	priority_queue<pair<ll, pair<ll, ll>>> pq;
	pq.push({0, {start, 0}});
	dp[0][0] = dp[1][0] = LLONG_MAX / 2;
	while (!pq.empty()) {
		ll c, node, par;
		pair<ll, ll> p;
		tie(c, p) = pq.top();
		tie(node, par) = p;
		pq.pop();

		if (!visited[node]) {
			visited[node] = true;
			ds[node] = -c;
			dp[0][node] = min(du[node], dp[0][par]);
			dp[1][node] = min(dv[node], dp[1][par]);
			for (auto i : graph[node]) pq.push({c - i.second, {i.first, node}});
		} else if (-c == ds[node]) {
			if (min(du[node], dp[0][par]) + min(dv[node], dp[1][par]) <=
			    dp[0][node] + dp[1][node]) {
				dp[0][node] = min(du[node], dp[0][par]);
				dp[1][node] = min(dv[node], dp[1][par]);
			}
		}
	}

	ans = min(ans, dp[0][end] + dp[1][end]);
}

int main() {
	iostream::sync_with_stdio(false);
	cin.tie(0);
	ll n, m, s, t, u, v;
	cin >> n >> m >> s >> t >> u >> v;
	for (int i = 0; i < m; i++) {
		ll a, b, c;
		cin >> a >> b >> c;
		graph[a].push_back({b, c});
		graph[b].push_back({a, c});
	}

	dijkstra1(u, du);
	dijkstra1(v, dv);

	ans = du[v];

	dijkstra2(s, t);
	dijkstra2(t, s);

	cout << ans << '\n';
	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 404 ms 32644 KB Output is correct
2 Correct 340 ms 31296 KB Output is correct
3 Correct 340 ms 31856 KB Output is correct
4 Correct 416 ms 31776 KB Output is correct
5 Correct 344 ms 26692 KB Output is correct
6 Correct 403 ms 32812 KB Output is correct
7 Correct 360 ms 30656 KB Output is correct
8 Correct 351 ms 30980 KB Output is correct
9 Correct 409 ms 31792 KB Output is correct
10 Correct 376 ms 33180 KB Output is correct
11 Correct 76 ms 14072 KB Output is correct
12 Correct 383 ms 32380 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 369 ms 31640 KB Output is correct
2 Correct 350 ms 26508 KB Output is correct
3 Correct 344 ms 31408 KB Output is correct
4 Correct 376 ms 26748 KB Output is correct
5 Correct 337 ms 26440 KB Output is correct
6 Correct 339 ms 31656 KB Output is correct
7 Correct 334 ms 26540 KB Output is correct
8 Correct 308 ms 26664 KB Output is correct
9 Correct 377 ms 26632 KB Output is correct
10 Correct 328 ms 31428 KB Output is correct
11 Correct 65 ms 13908 KB Output is correct
12 Correct 351 ms 31348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 31 ms 9876 KB Output is correct
2 Correct 2 ms 6744 KB Output is correct
3 Correct 2 ms 6748 KB Output is correct
4 Correct 66 ms 12844 KB Output is correct
5 Correct 31 ms 10784 KB Output is correct
6 Correct 3 ms 7000 KB Output is correct
7 Correct 4 ms 7004 KB Output is correct
8 Correct 5 ms 7244 KB Output is correct
9 Correct 3 ms 7004 KB Output is correct
10 Correct 30 ms 10748 KB Output is correct
11 Correct 2 ms 7000 KB Output is correct
12 Correct 2 ms 6652 KB Output is correct
13 Correct 2 ms 6748 KB Output is correct
14 Correct 3 ms 6748 KB Output is correct
15 Correct 2 ms 6748 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 404 ms 32644 KB Output is correct
2 Correct 340 ms 31296 KB Output is correct
3 Correct 340 ms 31856 KB Output is correct
4 Correct 416 ms 31776 KB Output is correct
5 Correct 344 ms 26692 KB Output is correct
6 Correct 403 ms 32812 KB Output is correct
7 Correct 360 ms 30656 KB Output is correct
8 Correct 351 ms 30980 KB Output is correct
9 Correct 409 ms 31792 KB Output is correct
10 Correct 376 ms 33180 KB Output is correct
11 Correct 76 ms 14072 KB Output is correct
12 Correct 383 ms 32380 KB Output is correct
13 Correct 369 ms 31640 KB Output is correct
14 Correct 350 ms 26508 KB Output is correct
15 Correct 344 ms 31408 KB Output is correct
16 Correct 376 ms 26748 KB Output is correct
17 Correct 337 ms 26440 KB Output is correct
18 Correct 339 ms 31656 KB Output is correct
19 Correct 334 ms 26540 KB Output is correct
20 Correct 308 ms 26664 KB Output is correct
21 Correct 377 ms 26632 KB Output is correct
22 Correct 328 ms 31428 KB Output is correct
23 Correct 65 ms 13908 KB Output is correct
24 Correct 351 ms 31348 KB Output is correct
25 Correct 31 ms 9876 KB Output is correct
26 Correct 2 ms 6744 KB Output is correct
27 Correct 2 ms 6748 KB Output is correct
28 Correct 66 ms 12844 KB Output is correct
29 Correct 31 ms 10784 KB Output is correct
30 Correct 3 ms 7000 KB Output is correct
31 Correct 4 ms 7004 KB Output is correct
32 Correct 5 ms 7244 KB Output is correct
33 Correct 3 ms 7004 KB Output is correct
34 Correct 30 ms 10748 KB Output is correct
35 Correct 2 ms 7000 KB Output is correct
36 Correct 2 ms 6652 KB Output is correct
37 Correct 2 ms 6748 KB Output is correct
38 Correct 3 ms 6748 KB Output is correct
39 Correct 2 ms 6748 KB Output is correct
40 Correct 389 ms 32204 KB Output is correct
41 Correct 381 ms 32456 KB Output is correct
42 Correct 405 ms 33220 KB Output is correct
43 Correct 65 ms 14160 KB Output is correct
44 Correct 69 ms 14160 KB Output is correct
45 Correct 357 ms 25492 KB Output is correct
46 Correct 342 ms 25536 KB Output is correct
47 Correct 379 ms 27272 KB Output is correct
48 Correct 77 ms 13440 KB Output is correct
49 Correct 363 ms 31376 KB Output is correct
50 Correct 346 ms 26488 KB Output is correct
51 Correct 309 ms 26260 KB Output is correct