Submission #1296750

#TimeUsernameProblemLanguageResultExecution timeMemory
1296750fairkrashOlympic Bus (JOI20_ho_t4)C++20
5 / 100
1096 ms4496 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; ll INF = 1e18; ll MOD = 1e9 + 7; struct zxc { ll v; ll cost; ll revers; }; struct node { ll a, b, c, d; }; ll n, m; vector<vector<zxc>> g, rg; vector<pair<ll, ll>> dxs(ll v) { vector<pair<ll, ll>> dist(n, {INF, 0}); set<pair<ll, ll>> st; dist[v].first = 0; dist[v].second = 1; st.insert({dist[v].first, v}); while (!st.empty()) { ll u = st.begin()->second; st.erase(st.begin()); for (auto to: g[u]) { ll cnt = to.cost + dist[u].first; if (dist[to.v].first > cnt) { st.erase({dist[to.v].first, to.v}); dist[to.v].first = cnt; st.insert({dist[to.v].first, to.v}); } } } return dist; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cin >> n >> m; g.assign(n, {}); vector<node> r(m); vector<ll> bad; for (ll i = 0; i < m; i++) { ll a, b, c, d; cin >> a >> b >> c >> d; a--; b--; r[i] = {a, b, c, d}; g[a].push_back({b, c, d}); bad.push_back(i); } vector<pair<ll, ll>> dist_l_a = dxs(0); vector<pair<ll, ll>> dist_l_b = dxs(n - 1); ll answer = dist_l_a[n - 1].first + dist_l_b[0].first; for (ll i = 0; i < bad.size(); i++) { g.assign(n, {}); for (ll j = 0; j < m; j++) { ll a = r[j].a, b = r[j].b, c = r[j].c, d = r[j].d; if (j == i) { g[b].push_back({a, c, d}); continue; } g[a].push_back({b, c, d}); } vector<pair<ll, ll>> v1 = dxs(0), v2 = dxs(n - 1); answer = min(answer, v1[n - 1].first + v2[0].first + r[i].d); } if (answer >= INF) { cout << -1 << endl; return 0; } cout << answer; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...