제출 #854785

#제출 시각아이디문제언어결과실행 시간메모리
854785hungntCommuter Pass (JOI18_commuter_pass)C++14
15 / 100
143 ms19624 KiB
#include <bits/stdc++.h> #define pii pair<long long, int> #define fi first #define se second using namespace std; const int N = 100005; const long long inf = 1e18; int n, m; int S, T, U, V; vector<pair<int, int>> adj[N]; long long dist[N]; int pre[N]; priority_queue<pii, vector<pii>, greater<pii>> pq; void dijkstra(int st, int en, long long d[]) { for(int i = 1; i <= n; i++) d[i] = inf; d[st] = 0; pq.push({0, st}); while(!pq.empty()) { int u = pq.top().se; long long w = pq.top().fi; pq.pop(); if(d[u] != w) continue; for(auto x : adj[u]) { int v = x.fi, wei = x.se; if(d[v] > d[u] + wei) { d[v] = d[u] + wei; pre[v] = u; pq.push({d[v], v}); } } } } void sub1() { dijkstra(S, T, dist); int id = T, p; while(id != S) { p = pre[id]; adj[id].push_back({p, 0}); adj[p].push_back({id, 0}); id = p; } dijkstra(U, V, dist); cout << dist[V]; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m; cin >> S >> T >> U >> V; int u, v, w; while(m--) { cin >> u >> v >> w; adj[u].push_back({v, w}); adj[v].push_back({u, w}); } sub1(); 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...