Submission #1277326

#TimeUsernameProblemLanguageResultExecution timeMemory
1277326shirokitoCommuter Pass (JOI18_commuter_pass)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

const int N = 2e5 + 24;
const ll INF = 1e18;

int n, m, S, T, U, V;
vector<pair<ll, ll>> g[N];
vector<ll> distU, distV, distS;
ll dpU[N], dpV[N];
bool visit[N];

void gen_dist(int start, vector<ll> &dist) {
    dist.assign(n + 1, INF);
    dist[start] = 0;

    vector<bool> vis(n + 1, 0);

    multiset<pair<ll, ll>> mts;
    mts.insert({0, start});

    while (mts.size()) {
        auto node = *mts.begin();
        mts.erase(mts.find(node));
        int u = node.second;

        if (vis[u]) continue;
        vis[u] = 1;

        for (auto [v, w]: g[u]) {
            if (dist[v] > dist[u] + w) {
                dist[v] = dist[u] + w;
                mts.insert({dist[v], v});
            }
        }
    }

    // cout << start << '\n';
    // for  (int i = 1; i <= n; i++) {
    //     cout << i << ' ' << dist[i] << '\n';
    // }
}

void dfs(int u) {
    dpU[u] = min(dpU[u], distU[u]);
    dpV[u] = min(dpV[u], distV[u]);
    visit[u] = 1;

    for (auto [v, w]: g[u]) {
        if (!visit[v] && distS[v] + w == distS[u]) {
            dpU[v] = min(dpU[v], dpU[u]);
            dpV[v] = min(dpV[v], dpV[u]);
            dfs(v);
        }
    }
}

void solve() {
    cin >> n >> m >> S >> T >> U >> V;

    for (int i = 1; i <= m; i++) {
        int u, v, w; cin >> u >> v >> w;
        g[u].push_back({v, w});
        g[v].push_back({u, w});
    }

    gen_dist(S, distS);
    gen_dist(U, distU);
    gen_dist(V, distV);

    fill(dpU, dpU + n + 1, INF);
    fill(dpV, dpV + n + 1, INF);

    dfs(T);

    ll res = INF;
    for (int i = 1; i <= n; i++) {
        res = min(res, dpU[i] + distV[i]);
        res = min(res, dpV[i] + distU[i]);
    }

    cout << res << '\n';
}

int main() {
    cin.tie(0) -> sync_with_stdio(0);

    int TC = 1; // cin >> TC;
    while (TC--) {
        solve();
    }
}

Compilation message (stderr)

commuter_pass.cpp: In function 'void dfs(int)':
commuter_pass.cpp:49:5: error: reference to 'visit' is ambiguous
   49 |     visit[u] = 1;
      |     ^~~~~
In file included from /usr/include/x86_64-linux-gnu/c++/13/bits/stdc++.h:80,
                 from commuter_pass.cpp:1:
/usr/include/c++/13/variant:1891:5: note: candidates are: 'template<class _Res, class _Visitor, class ... _Variants> constexpr _Res std::visit(_Visitor&&, _Variants&& ...)'
 1891 |     visit(_Visitor&& __visitor, _Variants&&... __variants)
      |     ^~~~~
/usr/include/c++/13/variant:1851:5: note:                 'template<class _Visitor, class ... _Variants> constexpr std::__detail::__variant::__visit_result_t<_Visitor, _Variants ...> std::visit(_Visitor&&, _Variants&& ...)'
 1851 |     visit(_Visitor&& __visitor, _Variants&&... __variants)
      |     ^~~~~
commuter_pass.cpp:13:6: note:                 'bool visit [200024]'
   13 | bool visit[N];
      |      ^~~~~
commuter_pass.cpp:52:14: error: reference to 'visit' is ambiguous
   52 |         if (!visit[v] && distS[v] + w == distS[u]) {
      |              ^~~~~
/usr/include/c++/13/variant:1891:5: note: candidates are: 'template<class _Res, class _Visitor, class ... _Variants> constexpr _Res std::visit(_Visitor&&, _Variants&& ...)'
 1891 |     visit(_Visitor&& __visitor, _Variants&&... __variants)
      |     ^~~~~
/usr/include/c++/13/variant:1851:5: note:                 'template<class _Visitor, class ... _Variants> constexpr std::__detail::__variant::__visit_result_t<_Visitor, _Variants ...> std::visit(_Visitor&&, _Variants&& ...)'
 1851 |     visit(_Visitor&& __visitor, _Variants&&... __variants)
      |     ^~~~~
commuter_pass.cpp:13:6: note:                 'bool visit [200024]'
   13 | bool visit[N];
      |      ^~~~~