Submission #1359276

#TimeUsernameProblemLanguageResultExecution timeMemory
1359276camal1331Commuter Pass (JOI18_commuter_pass)C++20
31 / 100
167 ms35488 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define NEGGERS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);

const ll N=1e5+31,INF=1e18;

vector<pair<ll,ll>> g[N],ez[N];
ll ez2[N],ez1[N],ez3[N];

void dijk(ll s,ll d[],ll n,vector<pair<ll,ll>> gr[]){
	for(ll i=1;i<=n;i++) d[i]=INF;
	priority_queue<pair<ll,ll>,vector<pair<ll,ll>>,greater<pair<ll,ll>>> pq;
	pq.push({0,s});
	d[s]=0;
	while(!pq.empty()){
		ll v=pq.top().second;
		ll c=pq.top().first;
		pq.pop();
		if(c!=d[v]) continue;
		for(auto e:gr[v]){
			ll to=e.first,w=e.second;
			if(d[to]>c+w){
				d[to]=c+w;
				pq.push({d[to],to});
			}
		}
	}
}
void solve(){
	ll n,m,s,t,a,b;
	cin>>n>>m>>s>>t>>a>>b;
	vector<ll>x(m),y(m),w(m);
	for(ll i=0;i<m;i++){
		cin>>x[i]>>y[i]>>w[i];
		g[x[i]].push_back({y[i],w[i]});
		g[y[i]].push_back({x[i],w[i]});
	}
	dijk(s,ez2,n,g);
	dijk(t,ez1,n,g);
	ll best=ez2[t];
	for(ll i=0;i<m;i++){
		ll u=x[i],v=y[i],c=w[i];
		if(ez2[u]+c+ez1[v]==best or ez2[v]+c+ez1[u]==best){
			ez[u].push_back({v,0});
			ez[v].push_back({u,0});
		}
    else{
			ez[u].push_back({v,c});
			ez[v].push_back({u,c});
		}
	}
	dijk(a,ez3,n,ez);
	cout<<ez3[b];
}
signed main(){
    NEGGERS
    ll tt=1;
    //cin>>tt;
    while(tt--){
        solve();
    }
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...