제출 #1248417

#제출 시각아이디문제언어결과실행 시간메모리
1248417dungntCommuter Pass (JOI18_commuter_pass)C++20
100 / 100
282 ms18888 KiB
#include<bits/stdc++.h> #define M 100004 #define ll long long #define fi first #define se second #define pii pair<int, int> #define plli pair<long long, int> using namespace std; const long long inf = 1e16; int n, m; int S, T, U, V; vector<pii> adj[M]; vector<ll> dS, dT; vector<ll> dijkstra(int s) { vector<ll> d(n + 1, inf); priority_queue<plli, vector<plli>, greater<plli>> pq; d[s] = 0; pq.push({0, s}); while(!pq.empty()) { auto [du, u] = pq.top(); pq.pop(); if(du != d[u]) continue; for(pii &p : adj[u]) { int v = p.fi, w = p.se; if(d[v] > du + w) { d[v] = du + w; pq.push({d[v], v}); } } } return d; } bool cmp(int a, int b) { return dS[a] > dS[b]; } long long cal(vector<ll> &dU, vector<ll> &dV) { vector<vector<int>> dag(n + 1); for(int u = 1; u <= n; u++) { for(pii &p: adj[u]) { int v = p.fi, w = p.se; if(dS[u] + w + dT[v] == dS[T]) dag[u].push_back(v); } } vector<int> g; for(int i = 1; i <= n; i++) g.push_back(i); sort(g.begin(), g.end(), cmp); vector<ll> dp(n + 1, inf); for(int x = 1; x <= n; x++) dp[x] = dV[x]; for(int x : g) { for(int k : dag[x]) dp[x] = min(dp[x], dp[k]); } long long ans = inf; for(int x = 1; x <= n; x++) ans = min(ans, dU[x] + dp[x]); return ans; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #define name "baitap" if(fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); } cin >> n >> m; cin >> 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}); } dS = dijkstra(S); dT = dijkstra(T); auto dU = dijkstra(U); auto dV = dijkstra(V); cout << min(cal(dU, dV), cal(dV, dU)); }

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

commuter_pass.cpp: In function 'int main()':
commuter_pass.cpp:83:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   83 |         freopen(name".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
commuter_pass.cpp:84:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   84 |         freopen(name".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...