6
vector<ll> Dijkstra(vector<vector<pair<int, ll>>> &adj, int src) {8
vector<ll> dist(n, kInf);10
priority_queue<pair<ll, int>, vector<pair<ll, int>>, greater<pair<ll, int>>> pq;11
// pq contains pairs of <the current distance estimate from src to id, id>12
pq.push(make_pair(0, src));14
auto [d, cur] = pq.top();16
if (d != dist[cur]) continue;17
for (auto [nei, w] : adj[cur]) {18
if (dist[nei] > d + w) {20
pq.push(make_pair(dist[nei], nei));28
long long minimumWeight(int n, vector<vector<int>> &edges, int src1, int src2, int dest) {30
vector<vector<pair<int, ll>>> adj(n);31
vector<vector<pair<int, ll>>> rev(n); // the graph with reversed edges33
for (auto &e : edges) {34
u = e[0], v = e[1], w = e[2];35
adj[u].push_back(make_pair(v, w));36
rev[v].push_back(make_pair(u, w));39
vector<ll> dist_from_src1 = Dijkstra(adj, src1);40
vector<ll> dist_from_src2 = Dijkstra(adj, src2);41
vector<ll> dist_to_dest = Dijkstra(rev, dest);42
// find the smallest w[i]44
for (int i = 0; i < n; i++) {45
ans = min(ans, dist_from_src1[i] + dist_from_src2[i] + dist_to_dest[i]);47
return ans == kInf ? -1 : ans;