제출 #696421

#제출 시각아이디문제언어결과실행 시간메모리
696421finn__어르신 집배원 (BOI14_postmen)C++17
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h> using namespace std; #pragma GCC optimize("O3") #pragma GCC target("avx2") struct Edge { unsigned u, v, i, j, k; // u <-> i, v <-> j; Edge(unsigned u_, unsigned v_, unsigned i_, unsigned j_, unsigned k_) { u = u_, v = v_, i = i_, j = j_, k = k_; } }; vector<vector<Edge>> g; vector<Edge> edges; vector<bool> visited; void delete_edge(Edge e) { swap(g[e.u][e.i], g[e.u].back()); swap(g[e.v][e.j], g[e.v].back()); g[e.u].erase(g[e.u].end() - 1); g[e.v].erase(g[e.v].end() - 1); if (e.i < g[e.u].size()) { g[e.u][e.i].i = e.i; edges[g[e.u][e.i].k] = g[e.u][e.i]; g[g[e.u][e.i].v][g[e.u][e.i].j].j = e.i; edges[g[g[e.u][e.i].v][g[e.u][e.i].j].k] = g[g[e.u][e.i].v][g[e.u][e.i].j]; } if (e.j < g[e.v].size()) { g[e.v][e.j].i = e.j; edges[g[e.v][e.j].k] = g[e.v][e.j]; g[g[e.v][e.j].v][g[e.v][e.j].j].j = e.j; edges[g[g[e.v][e.j].v][g[e.v][e.j].j].k] = g[g[e.v][e.j].v][g[e.v][e.j].j]; } } unsigned get_next_edge(unsigned u, unsigned p) { if (g[u][0].v == p) return 1; return 0; } unsigned find_circuit(unsigned u, unsigned p = -1) { if (visited[u]) return u; visited[u] = 1; assert(!g[u].empty()); Edge e = g[u][get_next_edge(u, p)]; unsigned x = find_circuit(e.v, u); visited[u] = 0; if (x != UINT_MAX) { cout << u + 1 << ' '; delete_edge(edges[e.k]); if (u == x) x = UINT_MAX; } return x; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); size_t n, m; cin >> n >> m; g = vector<vector<Edge>>(n); visited = vector<bool>(n, 0); edges = vector<Edge>(m); for (size_t i = 0; i < m; i++) { unsigned u, v; cin >> u >> v; u--, v--; g[u].emplace_back(u, v, g[u].size(), g[v].size(), i); g[v].emplace_back(v, u, g[v].size(), g[u].size() - 1, i); edges[i] = g[u].back(); } for (unsigned u = 0; u < n; u++) { while (!g[u].empty()) { find_circuit(u); cout << '\n'; } } }

컴파일 시 표준 에러 (stderr) 메시지

In file included from /usr/include/c++/10/bits/alloc_traits.h:33,
                 from /usr/include/c++/10/ext/alloc_traits.h:34,
                 from /usr/include/c++/10/bits/basic_string.h:40,
                 from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/bits/locale_classes.h:40,
                 from /usr/include/c++/10/bits/ios_base.h:41,
                 from /usr/include/c++/10/ios:42,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from postmen.cpp:1:
/usr/include/c++/10/bits/stl_construct.h: In instantiation of 'void std::_Construct(_Tp*, _Args&& ...) [with _Tp = Edge; _Args = {}]':
/usr/include/c++/10/bits/stl_uninitialized.h:567:18:   required from 'static _ForwardIterator std::__uninitialized_default_n_1<_TrivialValueType>::__uninit_default_n(_ForwardIterator, _Size) [with _ForwardIterator = Edge*; _Size = long unsigned int; bool _TrivialValueType = false]'
/usr/include/c++/10/bits/stl_uninitialized.h:623:20:   required from '_ForwardIterator std::__uninitialized_default_n(_ForwardIterator, _Size) [with _ForwardIterator = Edge*; _Size = long unsigned int]'
/usr/include/c++/10/bits/stl_uninitialized.h:685:44:   required from '_ForwardIterator std::__uninitialized_default_n_a(_ForwardIterator, _Size, std::allocator<_Tp>&) [with _ForwardIterator = Edge*; _Size = long unsigned int; _Tp = Edge]'
/usr/include/c++/10/bits/stl_vector.h:1606:36:   required from 'void std::vector<_Tp, _Alloc>::_M_default_initialize(std::vector<_Tp, _Alloc>::size_type) [with _Tp = Edge; _Alloc = std::allocator<Edge>; std::vector<_Tp, _Alloc>::size_type = long unsigned int]'
/usr/include/c++/10/bits/stl_vector.h:512:9:   required from 'std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>::size_type, const allocator_type&) [with _Tp = Edge; _Alloc = std::allocator<Edge>; std::vector<_Tp, _Alloc>::size_type = long unsigned int; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<Edge>]'
postmen.cpp:83:27:   required from here
/usr/include/c++/10/bits/stl_construct.h:109:7: error: no matching function for call to 'Edge::Edge()'
  109 |     { ::new(static_cast<void*>(__p)) _Tp(std::forward<_Args>(__args)...); }
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
postmen.cpp:11:5: note: candidate: 'Edge::Edge(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int)'
   11 |     Edge(unsigned u_, unsigned v_, unsigned i_, unsigned j_, unsigned k_)
      |     ^~~~
postmen.cpp:11:5: note:   candidate expects 5 arguments, 0 provided
postmen.cpp:7:8: note: candidate: 'constexpr Edge::Edge(const Edge&)'
    7 | struct Edge
      |        ^~~~
postmen.cpp:7:8: note:   candidate expects 1 argument, 0 provided
postmen.cpp:7:8: note: candidate: 'constexpr Edge::Edge(Edge&&)'
postmen.cpp:7:8: note:   candidate expects 1 argument, 0 provided