제출 #1279734

#제출 시각아이디문제언어결과실행 시간메모리
1279734hanguyendanghuyCommuter Pass (JOI18_commuter_pass)C++20
100 / 100
221 ms20272 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define fi first #define se second constexpr ll MAXN=1e5+5,MAXV=3e5,MOD=1e9+7,INF=1e18; ll n,m,i,j,p,k,ans,dem,st,en,dist[3][MAXN],S,T,U,V,len[MAXN],miV[MAXN],miU[MAXN]; vector<pair<ll,ll>> adj[MAXN]; void dij(ll st,ll type){ priority_queue<pair<ll,ll>> q; dist[type][st]=0; q.push({0,st}); while(q.size()){ auto k=q.top();q.pop(); if(-k.fi>dist[type][k.se]) continue; for(auto x:adj[k.se]){ if(dist[type][x.fi]>-k.fi+x.se){ dist[type][x.fi]=-k.fi+x.se; q.push({-dist[type][x.fi],x.fi}); } } } } void solve(ll st,ll en){ vector<ll> len(n + 1, INF); vector<ll> miU(n + 1, INF); vector<ll> miV(n + 1, INF); len[st]=0; miU[st]=dist[1][st]; miV[st]=dist[2][st]; priority_queue<pair<ll,int>, vector<pair<ll,int>>, greater<pair<ll,int>>> q; q.push({0, st}); while (!q.empty()) { auto cur = q.top(); q.pop(); ll curDist = cur.first; int u = cur.second; if (curDist > len[u]) continue; for (auto &e : adj[u]) { int v = e.first; ll w = e.second; ll newDist = curDist + w; ll new_miU = min(miU[u], dist[1][v]); ll new_miV = min(miV[u], dist[2][v]); if (newDist < len[v]) { len[v] = newDist; miU[v] = new_miU; miV[v] = new_miV; q.push({len[v], v}); } else if (newDist == len[v]) { if (new_miU + new_miV < miU[v] + miV[v]) { miU[v] = new_miU; miV[v] = new_miV; q.push({len[v], v}); } } } } if(len[en]!=INF){ ans=min(ans,miU[en]+miV[en]); } } int main(){ ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin>>n>>m>>S>>T>>U>>V; for(i=1;i<=m;i++){ ll u,v,c; cin>>u>>v>>c; adj[u].pb({v,c}); adj[v].pb({u,c}); } for(i=1;i<=n;i++) dist[1][i]=dist[2][i]=INF; dij(U,1); dij(V,2); ans=dist[1][V]; solve(S,T); solve(T,S); cout<<ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...