제출 #1144430

#제출 시각아이디문제언어결과실행 시간메모리
1144430Robert_juniorCommuter Pass (JOI18_commuter_pass)C++20
0 / 100
162 ms24960 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pb push_back #define ins insert #define all(x) x.begin(), x.end() #define F first #define S second const int N = 2e5 + 7; int d[N], d1[N], d2[N], n, m, used[N], s, t, u, v, ans = 1e18; int dp[N][2]; vector<pair<int, int>>g[N]; void dijkstra(int st, int fi){ for(int i = 1; i <= n; i++){ d[i] = 1e18; used[i] = 0; dp[i][0] = dp[i][1] = 1e18; } priority_queue<array<int, 3>>q; d[st] = 0; q.push({0, st, st}); while(q.size()){ int we = -q.top()[0], v = q.top()[1], pr = q.top()[2]; q.pop(); if(used[v] && we == d[v]){ dp[v][0] = min(dp[v][0], dp[pr][0]); dp[v][1] = min(dp[v][1], dp[pr][1]); } else if(!used[v]){ dp[v][0] = min(d1[v], dp[pr][0]); dp[v][1] = min(d2[v], dp[pr][1]); used[v] = 1; for(auto [to, w] : g[v]){ if(d[to] >= d[v] + w){ d[to] = d[v] + w; q.push({-d[to], to, v}); } } } //cout<<v<<' '<<pr<<' '<<we<<' '<<d1[v]<<' '<<d2[v]<<' '<<dp[v][0]<<' '<<dp[v][1]<<'\n'; } ans = min(ans, dp[fi][0] + dp[fi][1]); } void dijkstra1(int s){ for(int i = 1; i <= n; i++){ used[i] = 0; d1[i] = 1e18; } d1[s] = 0; priority_queue<pair<int, int>>q; q.push({0, s}); while(q.size()){ int v = q.top().second; q.pop(); if(used[v]) continue; used[v] = 1; for(auto [to, w] : g[v]){ if(d1[to] > d1[v] + w){ d1[to] = d1[v] + w; q.push({-d1[to], to}); } } } } void dijkstra2(int s){ for(int i = 1; i <= n; i++){ used[i] = 0; d2[i] = 1e18; } d2[s] = 0; priority_queue<pair<int, int>>q; q.push({0, s}); while(q.size()){ int v = q.top().second; q.pop(); if(used[v]) continue; used[v] = 1; for(auto [to, w] : g[v]){ if(d2[to] > d2[v] + w){ d2[to] = d2[v] + w; q.push({-d[to], to}); } } } } void solve(){ cin>>n>>m>>s>>t>>u>>v; for(int i = 1; i <= m; i++){ int a, b, w; cin>>a>>b>>w; g[a].pb({b, w}); g[b].pb({a, w}); } dijkstra1(u); dijkstra2(v); dijkstra(s, t); //dijkstra(t, s); cout<<ans; } signed main(){ ios_base :: sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int t = 1; //cin>>t; while(t--){ solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...