제출 #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