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...