Submission #1179537

#TimeUsernameProblemLanguageResultExecution timeMemory
1179537MongHwaCommuter Pass (JOI18_commuter_pass)C++20
15 / 100
200 ms22392 KiB
#pragma GCC optimize ("Ofast") #pragma GCC optimize ("unroll-loops") #include <iostream> #include <vector> #include <queue> #include <tuple> using namespace std; #define ll long long #define INF 1e17 #define X first #define Y second vector<pair<int, int>> stage[100005]; vector<ll> sdist, udist, vdist; bool status[100005]; int in[100005]; ll udp[100005], vdp[100005]; vector<int> graph[100005]; queue<int> q; priority_queue<pair<ll, int>, vector<pair<ll, int>>, greater<pair<ll, int>>> pq; void dijkstra(vector<ll>& dist, int s) { fill(dist.begin(), dist.end(), INF); dist[s] = 0; pq.push({0, s}); while(!pq.empty()) { ll d; int cur; tie(d, cur) = pq.top(); pq.pop(); if(dist[cur] != d) continue; for(auto& nxt : stage[cur]) if(dist[nxt.X] > d + nxt.Y) { dist[nxt.X] = d + nxt.Y; pq.push({dist[nxt.X], nxt.X}); } } } void dfs(int cur) { udp[cur] = udist[cur]; vdp[cur] = vdist[cur]; for(auto& nxt : stage[cur]) if(sdist[nxt.X] + nxt.Y == sdist[cur] && !status[nxt.X]) { status[nxt.X] = 1; graph[cur].push_back(nxt.X); in[nxt.X]++; dfs(nxt.X); } } int main() { ios::sync_with_stdio(0); cin.tie(0); int n, m, s, t, u, v; cin >> n >> m >> s >> t >> u >> v; while(m--) { int a, b, c; cin >> a >> b >> c; stage[a].push_back({b, c}); stage[b].push_back({a, c}); } sdist.resize(n+1); udist.resize(n+1); vdist.resize(n+1); dijkstra(sdist, s); dijkstra(udist, u); dijkstra(vdist, v); dfs(t); ll ans = udist[v]; q.push(t); while(!q.empty()) { int cur = q.front(); q.pop(); ans = min(ans, udp[cur] + vdp[cur]); for(int& nxt : graph[cur]) { udp[nxt] = min(udp[nxt], udp[cur]); vdp[nxt] = min(vdp[nxt], vdp[cur]); in[nxt]--; if(in[nxt] == 0) q.push(nxt); } } cout << ans << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...