This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
//#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define MAXN 100005
#define MAXM 100005
#define mix(a, b) a = min(a,b)
using ll = long long;
const ll mod = 1e9 + 7;
vector<pair<int, ll>> g[MAXN];
vector<pair<int, ll>> gc[MAXN];
void dijkstra(vector<ll> &dist, int s) {
dist[s] = 0;
set<pair<ll, int>> q;
q.insert({0, s});
while (!q.empty()) {
int v = q.begin()->second;
q.erase(q.begin());
for (auto[u, c] : g[v]) {
if (dist[v] + c < dist[u]) {
q.erase({dist[u], u});
dist[u] = dist[v] + c;
q.insert({dist[u], u});
}
}
}
}
void solve() {
int n, m;
cin >> n >> m;
int s, t;
cin >> s >> t;
int u, v;
cin >> u >> v;
for (int i = 0; i < m; i++) {
int a, b, c;
cin >> a >> b >> c;
g[a].emplace_back(b, c);
g[b].emplace_back(a, c);
gc[a].emplace_back(b, c);
gc[b].emplace_back(a, c);
}
vector<ll> ds(n + 1, 1e18), dt(n + 1, 1e18);
dijkstra(ds, s);
dijkstra(dt, t);
ll dist = ds[t];
for (int w = 1; w <= n; w++) {
for (int i = 0; i < g[w].size(); i++) {
int to = g[w][i].first;
ll c = g[w][i].second;
if (ds[w] < ds[to]) {
if (ds[w] + c + dt[to] == dist)
g[w][i].second = 0;
}
}
}
vector<ll> bebra(n + 1, 1e18);
dijkstra(bebra, u);
ll ans = bebra[v];
// for (int w = 1; w <= n; w++) {
// for (int i = 0; i < g[w].size(); i++) {
// int to = g[w][i].first;
// ll c = g[w][i].second;
// if (dt[w] < dt[to]) {
// if (dt[w] + c + ds[to] == dist)
// g[w][i].second = 0;
// } else
// g[w][i].second = gc[w][i].second;
// }
// }
bebra.assign(n + 1, 1e18);
dijkstra(bebra, v);
cout << min(bebra[u],ans);
}
signed main() {
#ifdef LOCAL
freopen("input.txt", "r", stdin);
#endif
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t = 1;
// cin >> t;
while (t--)
solve();
return 0;
}
Compilation message (stderr)
commuter_pass.cpp: In function 'void solve()':
commuter_pass.cpp:52:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
52 | for (int i = 0; i < g[w].size(); i++) {
| ~~^~~~~~~~~~~~~
# | 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... |