제출 #595146

#제출 시각아이디문제언어결과실행 시간메모리
595146alexddCommuter Pass (JOI18_commuter_pass)C++17
0 / 100
450 ms23672 KiB
#include<iostream> #include<vector> #include<queue> #include<tuple> #include<algorithm> using namespace std; #define ll long long #define pb push_back #define pii pair<long long, long long> #define INF 1LL*100000000000007 ll n,m,s,t,u,v,ans; vector<pii> con[100001]; ll du[100001]; ll dv[100001]; void dijkstra(ll src, ll dist[]) { fill(dist,dist+100000,INF); dist[src]=0; priority_queue<pii, vector<pii>, greater<pii>> pq; pq.push({0,src}); ll cdist,nod,adj,w; while(!pq.empty()) { tie(cdist,nod)=pq.top(); pq.pop(); if(cdist!=dist[nod]) continue; for(auto aux:con[nod]) { tie(adj,w)=aux; if(dist[adj]>dist[nod]+w) { dist[adj]=dist[nod]+w; pq.push({dist[adj],adj}); } } } } ll dpu[100001]; ll dpv[100001]; ll dst[100001]; void dijkstra_parent(ll src, ll ult) { fill(dpu,dpu+100000,INF); fill(dpv,dpv+100000,INF); fill(dst,dst+100000,INF); priority_queue<pair<ll, pii>, vector<pair<ll, pii>>, greater<pair<ll, pii>>> pq; pq.push({0,{src,0}}); dst[src]=0; ll cdist,nod,adj,par,w; while(!pq.empty()) { cdist=pq.top().first; nod=pq.top().second.first; par=pq.top().second.second; pq.pop(); if(cdist!=dst[nod]) continue; for(auto aux:con[nod]) { tie(adj,w)=aux; if(dst[adj]>dst[nod]+w) { dst[adj]=dst[nod]+w; dpu[adj]=min(du[adj], dpu[nod]); dpv[adj]=min(dv[adj], dpv[nod]); pq.push({dst[adj],{adj,nod}}); } else if(dst[adj]==dst[nod]+w && min(du[adj], dpu[nod])+min(dv[adj], dpv[nod])<dpu[adj]+dpv[adj]) { dpu[adj]=min(du[adj], dpu[nod]); dpv[adj]=min(dv[adj], dpv[nod]); } } } ans=min(ans,dpu[ult]+dpv[ult]); } int main() { ll a,b,c; cin>>n>>m>>s>>t>>u>>v; for(ll i=1;i<=m;i++) { cin>>a>>b>>c; con[a].pb({b,c}); con[b].pb({a,c}); } dijkstra(u,du); dijkstra(v,dv); ans=du[v]; dijkstra_parent(s,t); dijkstra_parent(t,s); cout<<ans; }

컴파일 시 표준 에러 (stderr) 메시지

commuter_pass.cpp: In function 'void dijkstra_parent(long long int, long long int)':
commuter_pass.cpp:50:22: warning: variable 'par' set but not used [-Wunused-but-set-variable]
   50 |     ll cdist,nod,adj,par,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...