This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pii;
typedef tuple<ll,int,int,ll> tu;
ll disS[100001],disT[100001],disU[100001],disV[100001],dis[100001];
vector<pii> adj[100001];
int n,m,s,t,u,v;
bool check(int x, int y, ll val) { //check if x and y are on the same shortest path
return min(disS[x]+disT[y],disS[y]+disT[x])!=disS[t]-val;
}
void dij(int start, ll *dis) {
for (int i=1; i<=n; ++i) dis[i]=1e18;
bool vis[100001]; memset(vis,0,sizeof(vis));
priority_queue<pii, vector<pii>, greater<pii>> q;
dis[start]=0;
q.push(pii(0,start));
while (!q.empty()) {
ll node=q.top().second;
q.pop();
if (vis[node]) continue;
vis[node]=true;
for (auto s : adj[node]) {
ll des=s.first, w=s.second;
if (dis[des]>dis[node]+w) {
dis[des]=dis[node]+w;
q.push(pii(dis[des],des));
}
}
}
}
int main() {
ios_base::sync_with_stdio(0); cin.tie(0);
cin>>n>>m>>s>>t>>u>>v;
for (int i=0; i<m; ++i) {
int a,b,w;
cin>>a>>b>>w;
adj[a].push_back(pii(b,w));
adj[b].push_back(pii(a,w));
}
dij(s,disS);
dij(t,disT);
dij(v,disV);
priority_queue<tu, vector<tu>, greater<tu>> q;
bool vis[100001]; memset(vis,0,sizeof(vis));
ll ans=LLONG_MAX;
for (int i=1; i<=n; ++i) disU[i]=1e18;
disU[u]=0;
q.push(tu(0,u,u,0));
int ans_node;
while (!q.empty()) {
int pre=get<1>(q.top()),now=get<2>(q.top()),dis=get<3>(q.top());
q.pop();
if (vis[now]) continue;
vis[now]=true;
ans=min(ans,disU[now]+disV[now]);
for (auto s : adj[now]) {
ll des=s.first, w=s.second;
if (disS[pre]+disT[pre]==disS[t]) {
if (disU[des]>disU[now]+w*check(pre,des,dis+w)) {
disU[des]=disU[now]+w*check(pre,des,dis+w);
q.push(tu(disU[des],now,des,w));
}
} else {
if (disU[des]>disU[now]+w*check(now,des,w)) {
disU[des]=disU[now]+w*check(now,des,w);
q.push(tu(disU[des],now,des,w));
}
}
}
}
cout<<ans;
}
Compilation message (stderr)
commuter_pass.cpp: In function 'int main()':
commuter_pass.cpp:61:9: warning: unused variable 'ans_node' [-Wunused-variable]
61 | int ans_node;
| ^~~~~~~~
# | 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... |