제출 #1277326

#제출 시각아이디문제언어결과실행 시간메모리
1277326shirokitoCommuter Pass (JOI18_commuter_pass)C++20
컴파일 에러
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(); } }

컴파일 시 표준 에러 (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];
      |      ^~~~~