제출 #1170144

#제출 시각아이디문제언어결과실행 시간메모리
1170144edga1Commuter Pass (JOI18_commuter_pass)C++20
100 / 100
272 ms20964 KiB
#include <bits/stdc++.h> #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt") #define se second #define fi first #define pb push_back using namespace std; vector<pair<int,int>> e[100005]; vector<int> ne[100005]; long long minU[100005], minV[100005]; void d(int s, vector<long long> &att){ att[s]=0; priority_queue<pair<long long,int>, vector<pair<long long,int>>, greater<pair<long long,int>>> pq; vector<int> seen(100005,0); pq.push({0,s}); while(!pq.empty()){ auto cur=pq.top(); int pos=cur.second; pq.pop(); if(!seen[pos]){ for(int i=0; i<e[pos].size(); i++){ if(att[pos]+e[pos][i].second<att[e[pos][i].first] || att[e[pos][i].first]==-1){ att[e[pos][i].first]=att[pos]+e[pos][i].second; pq.push({att[pos]+e[pos][i].second,e[pos][i].first}); } } seen[pos]=1; } } } int main() { ios_base::sync_with_stdio(false); cin.tie(0); int n,m,s,t,u,v; cin>>n>>m>>s>>t>>u>>v; for(int i=0; i<m; i++){ int a,b,c; cin>>a>>b>>c; e[a].push_back({b,c}); e[b].push_back({a,c}); } vector<long long> ds(100005,-1), dt(100005,-1), dv(100005,-1), du(100005,-1); d(s,ds); d(t,dt); d(v,dv); d(u,du); vector<int> mark(100005,0); for(int i=1; i<=n; i++){ if(ds[t]==ds[i]+dt[i]){ mark[i]=1; } } for(int i=1; i<=n; i++){ for(int j=0; j<e[i].size(); j++){ if(mark[i] && mark[e[i][j].fi] && e[i][j].se+ds[i]==ds[e[i][j].fi]) ne[i].pb(e[i][j].fi); } } vector<pair<long long, int>> vert; for(int i=1; i<=n; i++){ if(mark[i]) vert.push_back({ds[i],i}); } sort(vert.begin(), vert.end(), greater<pair<long long, int>>()); long long res=1e18; for(int i=0; i<vert.size(); i++){ int pos=vert[i].se; minU[pos]=du[pos]; minV[pos]=dv[pos]; for(int j=0; j<ne[pos].size(); j++){ minU[pos]=min(minU[pos],minU[ne[pos][j]]); minV[pos]=min(minV[pos],minV[ne[pos][j]]); } res=min(res,du[pos]+minV[pos]); res=min(res,dv[pos]+minU[pos]); } cout<<min(res,du[v]); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...