Submission #1325549

#TimeUsernameProblemLanguageResultExecution timeMemory
1325549zwezdinvEscape Route (JOI21_escape_route)C++20
5 / 100
9095 ms111864 KiB
#include<bits/stdc++.h>

using ll = long long;

std::vector<ll> calculate_necessary_time(int n, int m, ll s, int q, std::vector<int> a, std::vector<int> b, std::vector<ll> l, std::vector<ll> c, std::vector<int> u, std::vector<int> v, std::vector<ll> t) {
    std::vector<std::vector<std::tuple<int, ll, ll>>> adj(n);
    for (int i = 0; i < m; ++i) {
        adj[a[i]].emplace_back(b[i], l[i], c[i]);
        adj[b[i]].emplace_back(a[i], l[i], c[i]);
    }
    auto dijkstra = [&](int u, ll t) -> std::vector<ll> {
        std::vector<ll> dp(n, 1e18);
        std::vector<bool> used(n, false);
        dp[u] = t;
        for (int iter = 0; iter < n; ++iter) {
            int u = -1;
            for (int v = 0; v < n; ++v) {
                if (!used[v] && (u == -1 || dp[v] < dp[u])) u = v;
            }
            used[u] = true;
            for (auto [to, l, c] : adj[u]) {
                if (dp[u] % s <= c - l) {
                    dp[to] = std::min(dp[to], dp[u] + l);
                } else {
                    dp[to] = std::min(dp[to], dp[u] + s - dp[u] % s + l);
                }
            }
        }
        return dp;
    };
    std::vector<ll> ans(q);
    for (int i = 0; i < q; ++i) {
        ans[i] = dijkstra(u[i], t[i])[v[i]] - t[i];
    }
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...