Submission #1176542

#TimeUsernameProblemLanguageResultExecution timeMemory
1176542TsaganaCommuter Pass (JOI18_commuter_pass)C++17
100 / 100
317 ms21892 KiB
#include<bits/stdc++.h> #define IOS ios_base::sync_with_stdio(false);cin.tie();cout.tie(); #define all(x) x.begin(), x.end() #define int long long #define pq priority_queue #define eb emplace_back #define lb lower_bound #define ub upper_bound #define pb push_back #define pp pop_back #define F first #define S second using namespace std; int n; int pz[100010], pt[100010]; vector<vector<pair<int, int>>> adj; vector<int> calc(int a) { set<pair<int, int>> s; s.insert({0, a}); vector<int> v(n + 1, 1e18); v[a] = 0; while (!s.empty()) { auto curr = s.begin(); int sum = (*curr).F, i = (*curr).S; s.erase(*curr); if (v[i] < sum) continue ; for (auto it: adj[i]) { if (v[it.F] > it.S + sum) { v[it.F] = it.S + sum; s.insert({it.S + sum, it.F}); } } } return v; } void solve () { int m; cin >> n >> m; int A, B, C, D; cin >> A >> B >> C >> D; adj.resize(n + 1); for (int i = 1; i <= m; i++) { int a, b, c; cin >> a >> b >> c; adj[a].pb({b, c}); adj[b].pb({a, c}); } vector<int> x = calc(A); vector<int> y = calc(B); vector<int> z = calc(C); vector<int> t = calc(D); vector<pair<int, int>> vp; for (int i = 1; i <= n; i++) { if (x[i] + y[i] == x[B]) { vp.pb({x[i], i}); } } sort(all(vp)); int ans = z[D]; for (auto i1 : vp) { int i = i1.S; pz[i] = z[i]; pt[i] = t[i]; for (auto it : adj[i]) { if (x[it.F] + it.S == x[i]) { pz[i] = min(pz[i], pz[it.F]); pt[i] = min(pt[i], pt[it.F]); } } ans = min(ans, pz[i] + t[i]); ans = min(ans, pt[i] + z[i]); } cout << ans; } signed main() {IOS solve(); 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...