Submission #66813

#TimeUsernameProblemLanguageResultExecution timeMemory
66813quoriessCommuter Pass (JOI18_commuter_pass)C++14
15 / 100
1128 ms38636 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
typedef pair<lli,lli> pii;
vector<set<pii> > adj;
void dijk(int start,vector<lli>& dist,vector<lli>& pre){
	set<pii> nodes;
	int len=dist.size();
	dist=vector<lli>(len,1e17);
	nodes.insert(pii(0,start));
	dist[start]=0;
	pre=vector<lli>(len,-1);
	while(!nodes.empty())
	{
		auto sim=*nodes.begin();		
		nodes.erase(sim);
		for(auto u:adj[sim.second]){
			if(dist[sim.second]+u.second<dist[u.first]){
				if(nodes.find(pii(dist[u.first],u.first))!=nodes.end())
					nodes.erase(pii(dist[u.first],u.first));
				dist[u.first]=dist[sim.second]+u.second;
				pre[u.first]=sim.second;
				nodes.insert(pii(dist[u.first],u.first));
			}
		}
	}
	
}
/*
5 7
1 3
1 5
1 2 1
2 3 3
1 3 2
3 4 1
3 5 2
1 4 1
1 5 7 
 * */
int main(){
	int n,m;
	cin>>n>>m;
	lli s,t,u,v;
	cin>>s>>t>>u>>v;
	adj=vector<set<pii> >(n+1,set<pii>());
	for (int i = 0; i < m; i++)
	{
		int a,b,c;
		cin>>a>>b>>c;
		adj[a].insert(pii(b,c));
		adj[b].insert(pii(a,c));
	}
	vector<lli> distS(n+1),preS(n+1);
	dijk(s,distS,preS);
	
	/*
	 * 
	 st 1 bozuk
	 vector<lli> distv(n+1),prev(n+1);
	
	dijk(v,distv,prev);
	lli snc=1e17;
	for (int i = t; i != -1 ; i=preS[i])
	{
		//cout <<"i: "<<i<<"\n";
		snc=min(distv[i],snc);
	}
	*/
	//st 2
	for (int i = t; i != s ; i=preS[i])
	{
		adj[i].erase(adj[i].upper_bound(pii(preS[i],-1)));
		adj[i].insert(pii(preS[i],0));
		
		adj[preS[i]].erase(adj[preS[i]].upper_bound(pii(i,-1)));
		adj[preS[i]].insert(pii(i,0));
	}
	vector<lli> distv(n+1),prev(n+1);
	dijk(v,distv,prev);	
	cout << distv[u]<<"\n";
	return 0;
}


#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...