#include<bits/stdc++.h>
#define M 100004
#define ll long long
#define fi first
#define se second
#define pii pair<int, int>
#define plli pair<long long, int>
using namespace std;
const long long inf = 1e16;
int n, m;
int S, T, U, V;
vector<pii> adj[M];
vector<ll> dS, dT;
vector<ll> dijkstra(int s)
{
vector<ll> d(n + 1, inf);
priority_queue<plli, vector<plli>, greater<plli>> pq;
d[s] = 0;
pq.push({0, s});
while(!pq.empty())
{
auto [du, u] = pq.top();
pq.pop();
if(du != d[u]) continue;
for(pii &p : adj[u])
{
int v = p.fi, w = p.se;
if(d[v] > du + w)
{
d[v] = du + w;
pq.push({d[v], v});
}
}
}
return d;
}
bool cmp(int a, int b)
{
return dS[a] > dS[b];
}
long long cal(vector<ll> &dU, vector<ll> &dV)
{
vector<vector<int>> dag(n + 1);
for(int u = 1; u <= n; u++)
{
for(pii &p: adj[u])
{
int v = p.fi, w = p.se;
if(dS[u] + w + dT[v] == dS[T])
dag[u].push_back(v);
}
}
vector<int> g;
for(int i = 1; i <= n; i++)
g.push_back(i);
sort(g.begin(), g.end(), cmp);
vector<ll> dp(n + 1, inf);
for(int x = 1; x <= n; x++)
dp[x] = dV[x];
for(int x : g)
{
for(int k : dag[x])
dp[x] = min(dp[x], dp[k]);
}
long long ans = inf;
for(int x = 1; x <= n; x++)
ans = min(ans, dU[x] + dp[x]);
return ans;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
#define name "baitap"
if(fopen(name".inp", "r"))
{
freopen(name".inp", "r", stdin);
freopen(name".out", "w", stdout);
}
cin >> n >> m;
cin >> S >> T >> U >> V;
for(int i = 1; i <= m; i++)
{
int u, v, w;
cin >> u >> v >> w;
adj[u].push_back({v, w});
adj[v].push_back({u, w});
}
dS = dijkstra(S);
dT = dijkstra(T);
auto dU = dijkstra(U);
auto dV = dijkstra(V);
cout << min(cal(dU, dV), cal(dV, dU));
}
컴파일 시 표준 에러 (stderr) 메시지
commuter_pass.cpp: In function 'int main()':
commuter_pass.cpp:83:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
83 | freopen(name".inp", "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
commuter_pass.cpp:84:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
84 | freopen(name".out", "w", stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
# | 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... |