#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#define pb push_back
#define int long long
#define repp(i,x,n) for(int i=x;i<=n;i++)
#define rep(i,x,n) for(int i=x;i>=n;i--)
#define cy cout<<"YES"<<endl
#define cn cout<<"NO"<<endl
#define r0 return 0
#define fi first
#define se second
#define liow ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define jelek cout<<"jelek"<<endl
#define pii pair<int,int>
#define all(v) v.begin(),v.end()
#define pi pair<pair<int,int>,pair<int,int>>
#define p3 pair<int,pair<int,int>>
#define p2
#define tp tuple<int,int,int>
#define fl fflush(stdout)
#define lb long double
#define p5 pair<int,pair<pair<int,int>,pair<int,int>>>
#pragma GCC optimize ("O2")
#pragma GCC optimize ("unroll-loops")
using namespace std;
int dx[4]={-1,0,1,0};
int dy[4]={0,-1,0,1};
using namespace __gnu_pbds;
typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> ordered_set;
typedef tree<pair<int,int>, null_type, less<pair<int,int>>, rb_tree_tag, tree_order_statistics_node_update> ordered_multiset;
const int mod=1e9+7,maxn=1e5+5,N=5e5+5,INF=1e18;
const int MOD=998244353;
//const int MOD=1e6+3;
mt19937_64 rng((unsigned int) chrono::steady_clock::now().time_since_epoch().count());
pii dir[8]={{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}};
vector<pii>adj[maxn];
int n,m,s,t,u,v;
int dtos[maxn],dtou[maxn],dtov[maxn];
bool visi[maxn];
void dik(int *dist,int x){
repp(i,1,n) dist[i]=INF;
dist[x]=0;
priority_queue<pii,vector<pii>,greater<pii>>pq;
pq.push({0,x});
while(!pq.empty()){
int dis=pq.top().fi,node=pq.top().se;pq.pop();
if(dist[node]!=dis) continue;
for(auto x:adj[node]){
if(dist[x.fi]>dis+x.se){
dist[x.fi]=dis+x.se;
pq.push({dis+x.se,x.fi});
}
}
}
}
int ans=INF;
pii mini[maxn];
pii dfs(int x){
if(visi[x]) return mini[x];
visi[x]=1;
pii lol={dtou[x],dtov[x]};
for(auto ah:adj[x]){
if(dtos[ah.fi]+ah.se==dtos[x]){
auto ahah=dfs(ah.fi);
ans=min(ans,ahah.fi+dtov[x]);
ans=min(ans,ahah.se+dtou[x]);
lol.fi=min(lol.fi,ahah.fi);
lol.se=min(lol.se,ahah.se);
}
}
return mini[x]=lol;
}
void solve(){
cin>>n>>m>>s>>t>>u>>v;
int c[m+2];
repp(i,1,m){
int x,y,c;cin>>x>>y>>c;
adj[x].pb({y,c});
adj[y].pb({x,c});
}
dik(dtos,s);dik(dtou,u);dik(dtov,v);
auto ahahah=dfs(t);
cout<<min(ans,dtou[v])<<endl;
}
signed main(){
liow;
int t=1;
// cin>>t;
while(t--){
solve();
}
}
# | 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... |