#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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |