Submission #857584

#TimeUsernameProblemLanguageResultExecution timeMemory
857584dio_2Commuter Pass (JOI18_commuter_pass)C++17
15 / 100
166 ms13740 KiB
#include<bits/stdc++.h> using namespace std; const long long inf = (long long)1e18; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int n, m, s, t, u, v; cin >> n >> m >> s >> t >> u >> v; vector<vector<pair<int, int>>> adj(n + 1); while(m--){ int a, b, c; cin >> a >> b >> c; adj[a].emplace_back(b, c); adj[b].emplace_back(a, c); } auto Do = [&](int src, vector<long long> &d)->void{ fill(d.begin(), d.end(), inf); vector<bool> in_Q(n + 1); d[src] = 0; priority_queue<pair<long long, int>> pq; pq.push({0, src}); while(!pq.empty()){ auto [_, node] = pq.top(); pq.pop(); if(in_Q[node]) continue; in_Q[node] = 1; for(auto [to, cost] : adj[node]){ if(d[node] + cost < d[to]){ d[to] = d[node] + cost; pq.push({-d[to], to}); } } } }; auto clear_cost = [&](int a, int b)->void{ for(auto &[node, _] : adj[a]) if(node == b) _ = 0; for(auto &[node, _] : adj[b]) if(node == a) _ = 0; }; vector<long long> D1(n + 1); vector<bool> in_sp(n + 1); Do(s, D1); bool unique = 1; queue<int> q; q.push(t); in_sp[t] = 1; while(!q.empty()){ int node = q.front(); q.pop(); int cnt = 0; for(auto [from, cost] : adj[node]){ if(D1[from] + cost == D1[node] && !in_sp[from]){ in_sp[from] = 1; q.push(from); ++cnt; unique &= (cnt == 1); clear_cost(from, node); } } } if(unique){ vector<long long> Du(n + 1); Do(u, Du); cout << Du[v] << '\n'; return 0; } if(s == u){ } 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...