#include<bits/stdc++.h>
#define ll long long
#define exoworldgd cin.tie(0)->sync_with_stdio(0),cout.tie(0)
#define P pair<ll,int>
using namespace std;
const int N=1e5+5,inf=1e9;
int n,m,s,t,u,v,ord[N];
vector<P>g1[N];
vector<int>g2[N];
ll ds[N],du[N],dv[N],dp[N][2][2];
void f(ll *d,int st){
priority_queue<P,vector<P>,greater<>>pq;
for(int i=0;i<=n;i++)d[i]=inf;
pq.emplace(0,st),d[st]=0;
while(pq.size()){
auto[dt,u]=pq.top();pq.pop();
for(auto[v,w]:g1[u])if(dt+w<d[v])pq.emplace(d[v]=dt+w,v);
}
}
signed main(void){
exoworldgd;
cin>>n>>m>>s>>t>>u>>v;
for(int i=0,a,b,c;i<m;i++)cin>>a>>b>>c,g1[a].emplace_back(b,c),g1[b].emplace_back(a,c);
f(ds,s),f(du,u),f(dv,v);
for(int i=1;i<=n;i++)for(auto[v,w]:g1[i])if(ds[v]+w==ds[i])g2[i].push_back(v);
for(int i=0;i<N;i++)dp[i][0][0]=dp[i][0][1]=dp[i][1][0]=dp[i][1][1]=inf;
iota(ord,ord+n,1),sort(ord,ord+n,[&](int x,int y){return ds[x]<ds[y];}),dp[s][0][0]=0;
for(int i=0;i<n;i++){
for(int j:g2[ord[i]])for(int k=0;k<2;k++)for(int l=0;l<2;l++)dp[ord[i]][k][l]=min(dp[ord[i]][k][l],dp[j][k][l]);
dp[ord[i]][0][1]=min(dp[ord[i]][0][1],dp[ord[i]][0][0]+du[ord[i]]),dp[ord[i]][1][0]=min(dp[ord[i]][1][0],dp[ord[i]][0][0]+dv[ord[i]]),dp[ord[i]][1][1]=min({dp[ord[i]][1][1],dp[ord[i]][1][0]+du[ord[i]],dp[ord[i]][0][1]+dv[ord[i]]});
}
cout<<min(dp[t][1][1],du[v]);
}
| # | 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... |