제출 #1324029

#제출 시각아이디문제언어결과실행 시간메모리
1324029sh_qaxxorov_571Commuter Pass (JOI18_commuter_pass)C++20
100 / 100
287 ms23024 KiB
#include <iostream> #include <vector> #include <queue> #include <algorithm> using namespace std; typedef long long ll; const ll INF = 1e18; struct Edge { int to; ll cost; }; void dijkstra(int start, int n, vector<ll>& dist, const vector<vector<Edge>>& adj) { dist.assign(n + 1, INF); dist[start] = 0; priority_queue<pair<ll, int>, vector<pair<ll, int>>, greater<pair<ll, int>>> pq; pq.push({0, start}); while (!pq.empty()) { ll d = pq.top().first; int u = pq.top().second; pq.pop(); if (d > dist[u]) continue; for (auto& edge : adj[u]) { if (dist[u] + edge.cost < dist[edge.to]) { dist[edge.to] = dist[u] + edge.cost; pq.push({dist[edge.to], edge.to}); } } } } int main() { int N, M, S, T, U, V; cin >> N >> M >> S >> T >> U >> V; vector<vector<Edge>> adj(N + 1); for (int i = 0; i < M; i++) { int a, b; ll c; cin >> a >> b >> c; adj[a].push_back({b, c}); adj[b].push_back({a, c}); } vector<ll> distS, distT, distU, distV; dijkstra(S, N, distS, adj); dijkstra(T, N, distT, adj); dijkstra(U, N, distU, adj); dijkstra(V, N, distV, adj); // S dan T ga eng qisqa yo'llar grafigini (DAG) qurish va DP vector<int> in_degree(N + 1, 0); vector<vector<int>> dag_adj(N + 1); for (int u = 1; u <= N; u++) { for (auto& edge : adj[u]) { if (distS[u] + edge.cost + distT[edge.to] == distS[T]) { dag_adj[u].push_back(edge.to); in_degree[edge.to]++; } } } // Topologik saralash va DP queue<int> q; for (int i = 1; i <= N; i++) if (in_degree[i] == 0) q.push(i); vector<ll> dpU = distU, dpV = distV; ll ans = distU[V]; while (!q.empty()) { int u = q.front(); q.pop(); ans = min(ans, dpU[u] + distV[u]); ans = min(ans, dpV[u] + distU[u]); for (int v : dag_adj[u]) { dpU[v] = min(dpU[v], dpU[u]); dpV[v] = min(dpV[v], dpV[u]); if (--in_degree[v] == 0) q.push(v); } } cout << ans << endl; 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...