Submission #1281661

#TimeUsernameProblemLanguageResultExecution timeMemory
1281661gayRobot (JOI21_ho_t4)C++20
34 / 100
1741 ms2162688 KiB
#include <bits/stdc++.h> #include <experimental/random> #include <random> using namespace std; using ll = long long; using ld = long double; const ll INF = 1e18, MOD = 1e9 + 7; void solve(); signed main() { #ifdef LOCAL freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int q = 1; //cin >> q; while (q--) { solve(); } } struct e { ll v, c, d; }; struct str { ll u, c, d, f; bool operator<(str a) const { return u < a.u || (u == a.u && c < a.c) || (u == a.u && c == a.c && d < a.d) || (u == a.u && c == a.c && d == a.d && f < a.f); } }; void solve() { ll n, m; cin >> n >> m; vector<vector<e>> g(n); vector<unordered_map<ll, ll>> cnt(n); for (int i = 0; i < m; i++) { ll a, b, c, d; cin >> a >> b >> c >> d; a--, b--; cnt[a][c] += d; cnt[b][c] += d; g[a].push_back({b, c, d}); g[b].push_back({a, c, d}); } vector<vector<vector<ll>>> dp(n, vector<vector<ll>>(m + 1, vector<ll>(2, INF))); dp[0][0][0] = 0; dp[0][0][1] = 0; set<pair<ll, str>> dj; dj.insert({0, {0, 0, 0, 0}}); while (!empty(dj)) { ll w = dj.begin()->first; ll u = dj.begin()->second.u; ll dd = dj.begin()->second.d; ll color = dj.begin()->second.c; ll f = dj.begin()->second.f; if (f) { cnt[u][color] -= dd; } dj.erase(dj.begin()); for (auto [v, c, d]: g[u]) { ll cost = w + d; if (dp[v][c][1] > cost) { dj.erase({dp[v][c][1], {v, c, d, 1}}); dp[v][c][1] = cost; dj.insert({dp[v][c][1], {v, c, d, 1}}); } cost = w + (cnt[u][c] - d); if (dp[v][c][0] > cost) { dj.erase({dp[v][c][0], {v, c, d, 0}}); dp[v][c][0] = cost; dj.insert({dp[v][c][0], {v, c, d, 0}}); } } if (f) { cnt[u][color] += dd; } } ll ans = INF; for (int i = 0; i <= m; i++) { ans = min(ans, dp[n - 1][i][0]); ans = min(ans, dp[n - 1][i][1]); } if (ans == INF) { cout << -1; } else { cout << ans; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...