#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt")
using namespace std;
vector<pair<int,int>> e[100005];
void d(int s, vector<long long> &att){
att[s]=0;
priority_queue<pair<long long,int>, vector<pair<long long,int>>, greater<pair<long long,int>>> pq;
vector<int> seen(100005,0);
pq.push({0,s});
while(!pq.empty()){
auto cur=pq.top();
int pos=cur.second;
pq.pop();
if(!seen[pos]){
for(int i=0; i<e[pos].size(); i++){
if(att[pos]+e[pos][i].second<att[e[pos][i].first] || att[e[pos][i].first]==-1){
att[e[pos][i].first]=att[pos]+e[pos][i].second;
pq.push({att[pos]+e[pos][i].second,e[pos][i].first});
}
}
seen[pos]=1;
}
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
int n,m,s,t,u,v;
cin>>n>>m>>s>>t>>u>>v;
for(int i=0; i<m; i++){
int a,b,c;
cin>>a>>b>>c;
e[a].push_back({b,c});
e[b].push_back({a,c});
}
vector<long long> ds(100005,-1), dt(100005,-1), dv(100005,-1), du(100005,-1);
d(s,ds);
d(t,dt);
d(v,dv);
d(u,du);
long long rv=-1,ru=-1;
for(int i=1; i<=n; i++){
if(ds[t]==ds[i]+dt[i]){
if(rv==-1 || dv[i]<rv) rv=dv[i];
if(ru==-1 || du[i]<ru) ru=du[i];
}
}
cout<<min(ru+rv,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... |