#include <bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
#define vi vector<int>
#define ff first
#define ss second
#define ll long long
#define int ll
const int INF = 1e9;
void solve() {
int n,m,s,t,u,v;
cin >> n >> m
>> s >> t
>> u >> v;
vector<pii> adj[n+1];
for (int i = 0; i<m; i++) {
int a,b,c;
cin >> a >> b >> c;
adj[a].push_back({b,c});
adj[b].push_back({a,c});
}
set<int> path;
priority_queue<pii, vector<pii>, greater<pii>> pq;
vector<bool> vis(n+1, false);
vi d(n+1, INF);
vi p(n+1, -1);
d[s] = 0;
pq.push({0, s});
while (!pq.empty()) {
int x = pq.top().ss;
pq.pop();
if (vis[x]) continue;
vis[x] = true;
for (auto ed : adj[x]) {
int nd = ed.ff;
int w = ed.ss;
if (d[nd] > d[x] + w) {
d[nd] = d[x] + w;
pq.push({d[nd], nd});
p[nd] = x;
}
}
}
for (int i = t; i != s; i = p[i]) path.insert(i);
path.insert(s);
vector<bool> rch_u(n+1, false);
vis.assign(n+1, false);
function<void(int)> dfs = [&] (int x) {
if (vis[x]) return ;
vis[x] = true;
rch_u[x] = true;
for (auto [nd, w] : adj[x]) {
dfs(nd);
}
};
dfs(u);
vis.assign(n+1, false);
d.assign(n+1, INF);
d[v] = 0;
queue<int> q;
q.push(v);
while (!q.empty()) {
int x = q.front();
q.pop();
if (vis[x]) continue;
vis[x] = true;
for (auto [nd, w] : adj[x]) {
d[nd] = min(d[nd], d[x] + w);
q.push(nd);
}
}
int ans = d[u];
for (auto nd : path) {
if (rch_u[nd]) {
ans = min(ans, d[nd]);
}
}
cout << ans << endl;
}
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t = 1;
// cin >> t;
while (t--) {
solve();
}
}
# | 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... |