제출 #1203794

#제출 시각아이디문제언어결과실행 시간메모리
1203794chawinknCommuter Pass (JOI18_commuter_pass)C++20
31 / 100
148 ms18620 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define pii pair<int,int>

vector<pii> g[100009];
vector<int> distS(100009, 1e18), distT(100009, 1e18), distU(100009, 1e18), distV(100009, 1e18);
priority_queue<pii,vector<pii>,greater<pii>> pq;
bool cp[100009];

void sp(vector<int>& dist, int u) {
	pq.push({dist[u]=0, u});
	while (!pq.empty()) {
		auto [d,u]=pq.top(); pq.pop();
		for (auto [v,w] : g[u]) {
			if (cp[u] && cp[v])
				w = 0;
			if (d+w < dist[v])
				pq.push({dist[v]=d+w, v});
		}
	}
}

signed main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL);
	int n, m, S, T, U, V;
	cin >> n >> m >> S >> T >> U >> V;
	while (m--) {
		int u, v, w;
		cin >> u >> v >> w;
		g[u].push_back({v, w});
		g[v].push_back({u, w});
	}
	sp(distS, S), sp(distT, T);
	for (int i = 1; i <= n; i++)
		cp[i] = distS[i]+distT[i] == distS[T];
	sp(distU, U);
	cout << distU[V];
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...