제출 #945496

#제출 시각아이디문제언어결과실행 시간메모리
945496irmuunCommuter Pass (JOI18_commuter_pass)C++17
16 / 100
342 ms24068 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define ff first #define ss second #define all(s) s.begin(),s.end() #define rall(s) s.rbegin(),s.rend() int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); ll n,m; cin>>n>>m; ll S,T,U,V; cin>>S>>T>>U>>V; vector<pair<ll,ll>>adj[n+5]; for(ll i=1;i<=m;i++){ ll u,v,w; cin>>u>>v>>w; adj[u].pb({v,w}); adj[v].pb({u,w}); } vector<vector<ll>>dist(4,vector<ll>(n+5,1e18)); dist[0][S]=0; dist[1][T]=0; dist[2][U]=0; dist[3][V]=0; set<pair<ll,ll>>st; st.insert({0,S}); while(!st.empty()){ auto [D,i]=*st.begin(); st.erase(st.begin()); if(dist[0][i]!=D) continue; for(auto [j,c]:adj[i]){ if(dist[0][j]>dist[0][i]+c){ dist[0][j]=dist[0][i]+c; st.insert({dist[0][j],j}); } } } st.insert({0,T}); while(!st.empty()){ auto [D,i]=*st.begin(); st.erase(st.begin()); if(dist[1][i]!=D) continue; for(auto [j,c]:adj[i]){ if(dist[1][j]>dist[1][i]+c){ dist[1][j]=dist[1][i]+c; st.insert({dist[1][j],j}); } } } st.insert({0,U}); while(!st.empty()){ auto [D,i]=*st.begin(); st.erase(st.begin()); if(dist[2][i]!=D) continue; for(auto [j,c]:adj[i]){ if(dist[2][j]>dist[2][i]+c){ dist[2][j]=dist[2][i]+c; st.insert({dist[2][j],j}); } } } st.insert({0,V}); while(!st.empty()){ auto [D,i]=*st.begin(); st.erase(st.begin()); if(dist[3][i]!=D) continue; for(auto [j,c]:adj[i]){ if(dist[3][j]>dist[3][i]+c){ dist[3][j]=dist[3][i]+c; st.insert({dist[3][j],j}); } } } // S T U V if(S==U){ ll ans=1e18; for(ll i=1;i<=n;i++){ if(dist[0][i]+dist[1][i]==dist[0][T]){ ans=min(ans,dist[3][i]); } } cout<<ans; return 0; } cout<<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...