Submission #1019424

#TimeUsernameProblemLanguageResultExecution timeMemory
1019424KodikCommuter Pass (JOI18_commuter_pass)C++17
31 / 100
160 ms28348 KiB
#include <bits/stdc++.h> using namespace std; #define ss second #define ff first typedef long long ll; #define int ll int mod = 1e9+7; // int inf = 1e18; signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); // ifstream cin ("shortcut.in"); // ofstream cout ("shortcut.out"); int n, m, s, t, u, v; cin >> n >> m >> s >> t >> u >> v; --s; --t; --u; --v; vector<pair<int,int>> adj[n]; for(int i = 0; i < m; ++i){ int a,b,c; cin >> a >> b >> c; --a; --b; adj[a].push_back({c,b}); adj[b].push_back({c,a}); } vector<int> dis(n, 1e18); dis[s] = 0; priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> pq; vector<int> par[n]; pq.push({0, s}); while(!pq.empty()){ pair<int,int> a = pq.top(); pq.pop(); if(dis[a.ss]!=a.ff){ continue; } for(auto &[w, nxt] : adj[a.ss]){ if(a.ff+w<dis[nxt]){ par[nxt].clear(); par[nxt].push_back(a.ss); pq.push({a.ff+w, nxt}); dis[nxt] = a.ff+w; }else if(a.ff+w==dis[nxt]){ par[nxt].push_back(a.ss); } } } vector<bool> ways(n, false); vector<bool> check(n, false); queue<int> q; q.push({t}); check[t] = true; while(!q.empty()){ int a = q.front(); q.pop(); ways[a] = true; for(int i : par[a]){ if(!check[i]){ q.push(i); check[i] = true; } } } using te = pair<int,pair<int,bool>>; priority_queue<te, vector<te>, greater<te>> ppq; ppq.push({0,{u,0}}); dis.assign(n, 1e18); dis[u] = 0; while(!ppq.empty()){ int weight = ppq.top().ff; int node = ppq.top().ss.ff; bool go = ppq.top().ss.ss; ppq.pop(); if(dis[node]!=weight){ continue; } for(auto &[w, nxt] : adj[node]){ if(!go&&ways[node]&&ways[nxt]){ if(weight<dis[nxt]){ dis[nxt] = weight; ppq.push({weight,{nxt,nxt==s||nxt==t}}); } } if(weight+w<dis[nxt]){ dis[nxt] = weight+w; ppq.push({weight+w,{nxt, go}}); } } } cout << dis[v] << '\n'; return 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...