Submission #359034

#TimeUsernameProblemLanguageResultExecution timeMemory
359034shahriarkhanCommuter Pass (JOI18_commuter_pass)C++14
100 / 100
454 ms25384 KiB
#include<bits/stdc++.h> using namespace std ; const int mx = 1e5 + 5 ; const long long INF = 1e18 ; typedef pair<long long , int> li ; vector<pair<int,long long> > adj[mx] ; long long dp1[mx] , dp2[mx] , dist_s[mx] , dist_t[mx] , dist_u[mx] , dist_v[mx] , ans = INF ; int vis[mx] , n , m ; void djikstra1(int start , long long dist[]) { for(int i = 1 ; i <= n ; ++i) dist[i] = INF , vis[i] = 0 ; priority_queue<li,vector<li>,greater<li> > pq ; pq.push({0,start}) , dist[start] = 0 ; while(!pq.empty()) { int u = pq.top().second ; long long cost = pq.top().first ; pq.pop() ; if(vis[u]) continue ; vis[u] = 1 ; for(auto p : adj[u]) { int v = p.first ; long long w = p.second ; if(dist[v] > (cost + w)) { dist[v] = cost + w ; pq.push({dist[v],v}) ; } } } return ; } void djikstra2(int s , long long dp[] , long long dist[]) { for(int i = 1 ; i <= n ; ++i) { dp[i] = dist_u[i] ; dist[i] = INF ; vis[i] = 0 ; } priority_queue<li,vector<li>,greater<li> > pq ; pq.push({0,s}) , dist[s] = 0 ; while(!pq.empty()) { int u = pq.top().second ; long long cost = pq.top().first ; pq.pop() ; if(vis[u]) continue ; vis[u] = 1 ; for(auto p : adj[u]) { int v = p.first ; long long w = p.second ; if(dist[v] == (cost+w)) dp[v] = min(dp[v],dp[u]) ; else if(dist[v] > (cost+w)) { dist[v] = cost + w ; dp[v] = min(dist_u[v],dp[u]) ; pq.push({dist[v],v}) ; } } } return ; } int main() { scanf("%d%d",&n,&m) ; int s , t ; scanf("%d%d",&s,&t) ; int u , v ; scanf("%d%d",&u,&v) ; for(int i = 1 ; i <= m ; ++i) { int a , b ; long long c ; scanf("%d%d%lld",&a,&b,&c) ; adj[a].push_back({b,c}) ; adj[b].push_back({a,c}) ; } djikstra1(u,dist_u) ; djikstra1(v,dist_v) ; djikstra2(s,dp1,dist_s) ; djikstra2(t,dp2,dist_t) ; for(int i = 1 ; i <= n ; ++i) { if(dist_s[t]==(dist_s[i] + dist_t[i])) { ans = min(ans,dist_v[i] + min(dp1[i],dp2[i])) ; } } printf("%lld\n",min(ans,dist_u[v])) ; return 0 ; }

Compilation message (stderr)

commuter_pass.cpp: In function 'int main()':
commuter_pass.cpp:75:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   75 |     scanf("%d%d",&n,&m) ;
      |     ~~~~~^~~~~~~~~~~~~~
commuter_pass.cpp:77:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   77 |     scanf("%d%d",&s,&t) ;
      |     ~~~~~^~~~~~~~~~~~~~
commuter_pass.cpp:79:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   79 |     scanf("%d%d",&u,&v) ;
      |     ~~~~~^~~~~~~~~~~~~~
commuter_pass.cpp:84:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   84 |         scanf("%d%d%lld",&a,&b,&c) ;
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...