제출 #834651

#제출 시각아이디문제언어결과실행 시간메모리
834651vjudge1Commuter Pass (JOI18_commuter_pass)C++17
100 / 100
332 ms29232 KiB
#include <bits/stdc++.h> #define fi first #define se second #define pii pair<long long, long long> const int nmax = 5e5 + 5; const int mod = 1e9 + 7; const long long INF = 1e18; using namespace std; int n, m, S, T, U, V; priority_queue<pii, vector<pii>, greater<pii>> q; long long dp[nmax][4], f[nmax], ans = INF; pii a[nmax]; vector<pii> adj[nmax]; void build(int S, int x) { for(int i = 1; i <= n; ++i) dp[i][x] = INF; dp[S][x] = 0; q.push({0, S}); while(q.size()) { int u = q.top().se; int lc = q.top().fi; q.pop(); for(auto tmp : adj[u]) { int v = tmp.first; long long w = tmp.second; if(dp[v][x] > dp[u][x] + w) { dp[v][x] = dp[u][x] + w; q.push({dp[v][x], v}); } } } } void solve() { ans = dp[V][1]; //S for(int i = 1; i <= n; ++i) a[i] = {dp[i][0], i}; sort(a + 1, a + n + 1); //U for(int i = 1; i <= n; ++i) f[i] = dp[i][2]; for(int i = n; i >= 1; --i){ int u = a[i].se; for(auto [v, w] : adj[u]) { if(dp[u][0] + w == dp[v][0] && dp[v][0] + dp[v][3] == dp[T][0]){ f[u] = min(f[u], f[v]); } } } for(int i = 1; i <= n; ++i) ans = min(ans, f[i] + dp[i][1]); for(int i = 1; i <= n; ++i) f[i] = dp[i][1]; for(int i = n; i >= 1; --i){ int u = a[i].se; for(auto [v, w] : adj[u]){ if(dp[u][0] + w == dp[v][0] && dp[v][0] + dp[v][3] == dp[T][0]){ f[u] = min(f[u], f[v]); } } } //dp[i][2] = dp[i][u] for(int i = 1; i <= n; ++i) ans = min(ans, f[i] + dp[i][2]); cout << ans; } int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> m >> S >> T >> U >> V; for(int i = 1; i <= m; ++i){ int u, v, w; cin >> u >> v >> w; adj[u].push_back({v, w}); adj[v].push_back({u, w}); } build(S, 0); build(U, 1); build(V, 2); build(T, 3); solve(); }

컴파일 시 표준 에러 (stderr) 메시지

commuter_pass.cpp: In function 'void build(int, int)':
commuter_pass.cpp:30:13: warning: unused variable 'lc' [-Wunused-variable]
   30 |         int lc = q.top().fi;
      |             ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...