Submission #50627338


Source Code Expand

#include <bits/stdc++.h>
#include <atcoder/modint>

namespace {
    using ModInt [[maybe_unused]] = atcoder::modint998244353;
    using Num [[maybe_unused]] = long long int;
    using Vec [[maybe_unused]] = std::vector<Num>;
    using Set [[maybe_unused]] = std::set<Num>;
    using Mset [[maybe_unused]] = std::multiset<Num>;
    using Edges [[maybe_unused]] = std::vector<std::vector<Num>>;

    template<typename T>
    using Q [[maybe_unused]] = std::queue<T>;

    template<typename T>
    using PQ [[maybe_unused]] = std::priority_queue<T, std::vector<T>, std::greater<T>>;
}

void solve(std::istream& is, std::ostream& os) {
    Num n, m;
    is >> n >> m;

    std::vector<std::vector<std::tuple<Num, Num, Num, Num, Num>>> stations(n);
    std::optional<Num> lst_n;

    for(Num i{0}; i<m; ++i) {
        Num l, d, k, c, a, b;
        is >> l >> d >> k >> c >> a >> b;
        --a;
        --b;

        stations[b].push_back(std::make_tuple(a, l, d, k, c));
        if (b != (n-1)) {
            continue;
        }

        const Num lst = l + (k - 1) * d + c;
        if (!lst_n.has_value()) {
            lst_n = lst;
        } else {
            lst_n = std::max(lst_n.value(), lst);
        }
    }

    if (!lst_n.has_value()) {
        for(Num i{0}; i<(n-1); ++i) {
            os << "Unreachable\n";
        }
        return;
    }

    std::priority_queue<std::pair<Num, Num>> q;
    std::vector<std::optional<Num>> ts(n);
    ts.at(n-1) = lst_n.value();

    q.push(std::make_pair(lst_n.value(), n-1));
    while(!q.empty()) {
        const auto [src, from] = q.top();
        q.pop();

        std::map<Num, Num> tos;
        for(const auto& [to, l, d, k, c] : stations[from]) {
            const auto dst = src - c;
            if (dst < l) {
                continue;
            }

            const Num fst = l;
            const Num dept = l + std::clamp((dst - l) / d, 0LL, k-1) * d;

            if (tos.contains(to)) {
                tos[to] = std::max(tos[to], dept);
            } else {
                tos[to] = dept;
            }
        }

        for(const auto& [to, t] : tos) {
            if (!ts.at(to).has_value() || (ts.at(to).value() < t)) {
                ts.at(to) = t;
                q.push(std::make_pair(t, to));
            }
        }
    }

    for(Num i{0}; i<(n-1); ++i) {
        if (ts.at(i).has_value()) {
            os << ts.at(i).value() << "\n";
        } else {
            os << "Unreachable\n";
        }
    }
}

int main(void) {
    solve(std::cin, std::cout);
    return 0;
}

Submission Info

Submission Time
Task E - Last Train
User zettsut
Language C++ 20 (gcc 12.2)
Score 450
Code Size 2643 Byte
Status AC
Exec Time 359 ms
Memory 29552 KiB

Compile Error

Main.cpp: In function ‘void solve(std::istream&, std::ostream&)’:
Main.cpp:68:23: warning: unused variable ‘fst’ [-Wunused-variable]
   68 |             const Num fst = l;
      |                       ^~~

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 450 / 450
Status
AC × 3
AC × 33
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 01_random_15.txt, 01_random_16.txt, 01_random_17.txt, 01_random_18.txt, 01_random_19.txt, 01_random_20.txt, 01_random_21.txt, 01_random_22.txt, 01_random_23.txt, 01_random_24.txt, 01_random_25.txt, 01_random_26.txt, 01_random_27.txt, 01_random_28.txt, 01_random_29.txt, 01_random_30.txt, 01_random_31.txt, 01_random_32.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 3496 KiB
00_sample_01.txt AC 1 ms 3484 KiB
00_sample_02.txt AC 1 ms 3364 KiB
01_random_03.txt AC 340 ms 23364 KiB
01_random_04.txt AC 359 ms 23444 KiB
01_random_05.txt AC 346 ms 23328 KiB
01_random_06.txt AC 343 ms 23416 KiB
01_random_07.txt AC 343 ms 23388 KiB
01_random_08.txt AC 320 ms 21920 KiB
01_random_09.txt AC 319 ms 21936 KiB
01_random_10.txt AC 288 ms 17672 KiB
01_random_11.txt AC 247 ms 14988 KiB
01_random_12.txt AC 311 ms 19052 KiB
01_random_13.txt AC 151 ms 10876 KiB
01_random_14.txt AC 61 ms 7856 KiB
01_random_15.txt AC 74 ms 6876 KiB
01_random_16.txt AC 121 ms 10500 KiB
01_random_17.txt AC 285 ms 17676 KiB
01_random_18.txt AC 289 ms 20740 KiB
01_random_19.txt AC 286 ms 20736 KiB
01_random_20.txt AC 294 ms 20800 KiB
01_random_21.txt AC 288 ms 17616 KiB
01_random_22.txt AC 242 ms 15024 KiB
01_random_23.txt AC 181 ms 12304 KiB
01_random_24.txt AC 153 ms 11808 KiB
01_random_25.txt AC 342 ms 29552 KiB
01_random_26.txt AC 347 ms 29324 KiB
01_random_27.txt AC 341 ms 29412 KiB
01_random_28.txt AC 350 ms 29364 KiB
01_random_29.txt AC 10 ms 11092 KiB
01_random_30.txt AC 32 ms 4532 KiB
01_random_31.txt AC 125 ms 8356 KiB
01_random_32.txt AC 223 ms 13624 KiB