Submission #231468

#TimeUsernameProblemLanguageResultExecution timeMemory
231468nafis_shifatCommuter Pass (JOI18_commuter_pass)C++14
100 / 100
487 ms28892 KiB
#include<bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
using namespace std;
const int mxn=1e5+5;
const ll inf=1e18;
vector<int> adj[mxn];
 
vector <ll> cost[mxn];
 
ll d1[mxn],d2[mxn],d3[mxn],d4[mxn];
 
ll z;
ll ans;
int us[mxn]={};
ll minX[mxn],minY[mxn];
void dijkstra(int src,ll dist[]) {
	for(int i=1;i<mxn;i++)dist[i]=inf;
 
	dist[src]=0;
    
    priority_queue<pair<ll,int>> pq;
    pq.push({0,src});
 
    int vis[mxn]={};
 
    while(!pq.empty()) {
        
    	int u=pq.top().second;
    	pq.pop();
 
    	if(vis[u])continue;
    	vis[u]=1;
    	for(int i=0;i<adj[u].size();i++) {
    		int v=adj[u][i];
    		if(dist[u]+cost[u][i]<dist[v]) {
    			dist[v]=dist[u]+cost[u][i];
    			pq.push({-dist[v],v});
    		}
    	}
    }
 
}
 
 
void dfs(int cur,ll x,ll y) {
    
    x=min(x,d2[cur]);
	y=min(y,d3[cur]);
	
	ans=min(ans,x+y);
	ans=min(ans,x+minY[cur]);
	ans=min(ans,y+minX[cur]);
	
	if(us[cur])return;
    us[cur]=1;
 
	for(int i=0;i<adj[cur].size();i++) {
		int v=adj[cur][i];
		
 
		if(d1[cur]+cost[cur][i]+d4[v]==z) {
		     dfs(v,x,y);
		     minX[cur]=min(minX[cur],minX[v]);
		     minY[cur]=min(minY[cur],minY[v]);
		     
		}
	}
 
}
 
int main() {
	int n,m;
	scanf("%d%d",&n,&m);
	int S,T,U,V;
	scanf("%d%d%d%d",&S,&T,&U,&V);
 
	for(int i=0;i<m;i++)
	{
		int u,v;
		ll w;
		scanf("%d %d %lld",&u,&v,&w);
 
		adj[u].push_back(v);
		adj[v].push_back(u);
		cost[u].push_back(w);
		cost[v].push_back(w);
	}
 
	
	dijkstra(S,d1);
	dijkstra(T,d4);
	dijkstra(U,d2);
	dijkstra(V,d3);
	z=d1[T];
	ans=d2[V];
	
	for(int i=1;i<=n;i++)minX[i]=d2[i],minY[i]=d3[i];
	dfs(S,inf,inf);
 
	printf("%lld",ans);
 
}

Compilation message (stderr)

commuter_pass.cpp: In function 'void dijkstra(int, long long int*)':
commuter_pass.cpp:34:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
      for(int i=0;i<adj[u].size();i++) {
                  ~^~~~~~~~~~~~~~
commuter_pass.cpp: In function 'void dfs(int, long long int, long long int)':
commuter_pass.cpp:58:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<adj[cur].size();i++) {
              ~^~~~~~~~~~~~~~~~
commuter_pass.cpp: In function 'int main()':
commuter_pass.cpp:74:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d",&n,&m);
  ~~~~~^~~~~~~~~~~~~~
commuter_pass.cpp:76:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d%d%d",&S,&T,&U,&V);
  ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
commuter_pass.cpp:82:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d %lld",&u,&v,&w);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...