Submission #1231780

#TimeUsernameProblemLanguageResultExecution timeMemory
1231780antromancapCommuter Pass (JOI18_commuter_pass)C++20
15 / 100
151 ms14660 KiB
#include <bits/stdc++.h>

using namespace std;

template <class T> bool mini(T &x, const T &y) { return y < x ? x = y, 1 : 0; }
template <class T> bool maxi(T &x, const T &y) { return y > x ? x = y, 1 : 0; }

const int N = 1e5 + 1;
int n, m, S, T, U, V;
vector<pair<int, int>> adj[N];
long long d[N], d2[N], d3[N], f[N], g[N];
bool avail[N], mark[N];

void dijkstra(long long dist[], int s) {
	memset(avail, 0, N);
	memset(dist, 0x3f, 8 * N);
	priority_queue<pair<long long, int>, vector<pair<long long, int>>, greater<pair<long long, int>>> q;
	q.push({ dist[s] = 0, s });
	while (q.size()) {
		int u = q.top().second;
		q.pop();
		if (avail[u]) continue;
		avail[u] = 1;
		for (auto [v, w] : adj[u])
			if (mini(dist[v], dist[u] + w)) q.push({ dist[v], v });
	}
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> n >> m >> S >> T >> U >> V;
	for (int i = 1, u, v, w; i <= m; i++) {
		cin >> u >> v >> w;
		adj[u].push_back({ v, w });
		adj[v].push_back({ u, w });
	}

	dijkstra(d, S);
	dijkstra(d2, U);
	dijkstra(d3, V);

	memset(avail, 0, N);
	queue<int> q;
	q.push(T);
	vector<int> t;
	while (q.size()) {
		int u = q.front();
		q.pop();
		if (avail[u]) continue;
		t.push_back(u);
		mark[u] = 1;
		avail[u] = 1;
		for (auto [v, w] : adj[u])
			if (d[v] + w == d[u]) q.push(v);
	}

	reverse(t.begin(), t.end());
	memset(f, 0x3f, 8 * N);
	memset(g, 0x3f, 8 * N);
	long long ans = 1e18;
	for (int u : t) {
		mini(f[u], d2[u]);
		mini(g[u], d3[u]);
		mini(ans, f[u] + d3[u]);
		mini(ans, g[u] + d2[u]);
		for (auto [v, w] : adj[u])
			if (mark[v] && d[u] + w == d[v]) mini(f[v], f[u]), mini(g[v], g[u]);
	}
	cout << min(d2[V], ans);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...