Submission #1274783

#TimeUsernameProblemLanguageResultExecution timeMemory
1274783MisterReaperRobot (JOI21_ho_t4)C++17
Compilation error
0 ms0 KiB
// File robot.cpp created on 30.09.2025 at 20:29:06
#include <bits/stdc++.h>

using i64 = long long;

#ifdef DEBUG 
    #include "/home/ahmetalp/Desktop/Workplace/debug.h"
#else
    #define debug(...) void(23)
#endif

template<typename T>
bool chmin(T& a, T b) {
    if (a > b) {
        a = b;
        return true;
    }
    return false;
}

constexpr i64 inf = i64(1E18);

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    int N, M;
    std::cin >> N >> M;

    std::vector<std::array<int, 4>> E(M);
    for (int i = 0; i < M; ++i) {
        std::cin >> E[i][0] >> E[i][1] >> E[i][2] >> E[i][3];
        --E[i][0], --E[i][1];
    }

    std::vector<std::map<int, i64>> sum(N);
    std::vector<std::map<int, std::vector<int>>> adj(N);
    for (int i = 0; i < M; ++i) {
        adj[E[i][0]][E[i][2]].emplace_back(i);
        adj[E[i][1]][E[i][2]].emplace_back(i);
        sum[E[i][0]][E[i][2]] += E[i][3];
        sum[E[i][1]][E[i][2]] += E[i][3];
    }

    using T = std::tuple<i64, int, int>;
    std::priority_queue<T, std::vector<T>, std::greater<T>> pq;

    std::vector<i64> dis1(N, inf);
    std::vector<std::map<int, i64>> dis2(N);

    pq.emplace(dis1[0] = 0, -1, 0);
    while (!pq.empty()) {
        auto[d, col, v] = pq.top();
        pq.pop();
        debug(d, col, v);
        if (col == -1) {
            if (dis1[v] != d) {
                continue;
            }
            for (auto&[c, vec] : adj[v]) {
                for (auto i : vec) {
                    int u = E[i][0] ^ E[i][1] ^ v;
                    {
                        i64 cost = std::min<i64>(E[i][3], sum[v][c] - E[i][3]);
                        assert(cost >= 0);
                        if (chmin(dis1[u], d + cost)) {
                            pq.emplace(dis1[u], -1, u);
                        }
                    }
                    {
                        if (adj[u].contains(c)) {
                            if (!dis2[u].contains(c)) {
                                pq.emplace(dis2[u][c] = d, c, u);
                            } else if (chmin(dis2[u][c], d)) {
                                pq.emplace(dis2[u][c], c, u);
                            }
                        } 
                    }
                }
            }
        } else {
            if (dis2[v][col] != d) {
                continue;
            }
            auto& vec = adj[v][col];
            for (auto i : vec) {
                int u = E[i][0] ^ E[i][1] ^ v;
                i64 cost = sum[v][col] - E[i][3];
                assert(cost >= 0);
                if (chmin(dis1[u], d + cost)) {
                    pq.emplace(dis1[u], -1, u);
                }
            }
        }
    }

    i64 ans = dis1[N - 1];
    if (ans == inf) {
        ans = -1;
    }

    std::cout << ans << '\n';

    return 0;
}

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:71:36: error: '__gnu_cxx::__alloc_traits<std::allocator<std::map<int, std::vector<int> > >, std::map<int, std::vector<int> > >::value_type' {aka 'class std::map<int, std::vector<int> >'} has no member named 'contains'
   71 |                         if (adj[u].contains(c)) {
      |                                    ^~~~~~~~
Main.cpp:72:42: error: '__gnu_cxx::__alloc_traits<std::allocator<std::map<int, long long int> >, std::map<int, long long int> >::value_type' {aka 'class std::map<int, long long int>'} has no member named 'contains'
   72 |                             if (!dis2[u].contains(c)) {
      |                                          ^~~~~~~~