Submission #1163364

#TimeUsernameProblemLanguageResultExecution timeMemory
1163364boclobanchatCommuter Pass (JOI18_commuter_pass)C++20
16 / 100
141 ms19904 KiB
#include<bits/stdc++.h>
using namespace std;
#define ii pair<long long,long long>
#define fi first
#define se second
const int MAXN=2e5+5;
const long long INF=1e18;
vector<ii> ds[MAXN];
priority_queue< ii,vector<ii>,greater<ii> > pq;
long long dp[MAXN],ans[MAXN],pdp[MAXN];
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n,m,s,t,u,v;
	cin>>n>>m>>s>>t>>u>>v;
	for(int i=1;i<=m;i++)
	{
		int l,r,v;
		cin>>l>>r>>v;
		ds[l].push_back({r,v}),ds[r].push_back({l,v});
	}
	for(int i=1;i<=n;i++) dp[i]=INF*(i!=s),pdp[i]=INF*(i!=t),ans[i]=INF*(i!=u);
	pq.push({0,s});
	while(!pq.empty())
	{
		long long a=pq.top().fi,b=pq.top().se;
		pq.pop();
		if(dp[b]<a) continue;
		for(auto v:ds[b]) if(dp[v.fi]>a+v.se) pq.push({dp[v.fi]=a+v.se,v.fi});
	}
	pq.push({0,t});
	while(!pq.empty())
	{
		long long a=pq.top().fi,b=pq.top().se;
		pq.pop();
		if(pdp[b]<a) continue;
		for(auto v:ds[b]) if(pdp[v.fi]>a+v.se) pq.push({pdp[v.fi]=a+v.se,v.fi});
	}
	pq.push({0,u});
	while(!pq.empty())
	{
		long long a=pq.top().fi,b=pq.top().se;
		pq.pop();
		if(ans[b]<a) continue;
		for(auto v:ds[b]) if(ans[v.fi]>a+v.se*(!(dp[b]+pdp[v.fi]+v.se==dp[t]))) pq.push({ans[v.fi]=a+v.se*(!(dp[b]+pdp[v.fi]+v.se==dp[t])),v.fi});
	}
	cout<<ans[v];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...