제출 #1253254

#제출 시각아이디문제언어결과실행 시간메모리
1253254TIN세계 지도 (IOI25_worldmap)C++20
컴파일 에러
0 ms0 KiB
#include "worldmap.h" #include <functional> std::vector<std::vector<int>> create_map(int N, int M, std::vector<int> A, std::vector<int> B) { std::vector<std::vector<int>> ans(2 * N, std::vector<int>(2 * N, 1)); for (auto& x : A) --x; for (auto& x : B) --x; std::vector<std::vector<int>> adj(N, std::vector<int>()); for (int i = 0; i < M; i++) adj[A[i]].push_back(B[i]), adj[B[i]].push_back(A[i]); std::vector<int> euler_tour; if (M == N - 1) { bool sub1 = true; for (int i = 0; i + 1 < N; i++) if (A[i] != i || B[i] != i + 1) sub1 = false; if (sub1) { for (int i = 0; i < 2 * N; i++) for (int j = 0; j < 2 * N; j++) ans[i][j] = N; for (int i = 1; i < N; i++) for (int j = 0; j < 2 * N; j++) ans[i - 1][j] = i; } else { for (int i = 0; i < 2 * N; i++) for (int j = 0; j < 2 * N; j++) ans[i][j] = 1; std::function<void(int, int)> DFS; DFS = [&](int u, int par) { euler_tour.push_back(u + 1); for (int v : adj[u]) { if (v ^ par) { DFS(v, u); euler_tour.push_back(u + 1); } } }; DFS(0, 0); for (int i = 0; i < (int) euler_tour.size(); i++) for (int j = 0; j < 2 * N; j++) ans[i][j] = euler_tour[i]; } return ans; } if (M == N * (N - 1) / 2) { for (int i = 0; i < N; i++) { for (int j = 0; j < 2 * N; j++) { ans[i * 2][j] = i + 1; ans[i * 2 + 1][j] = (j + 1 <= N ? j + 1 : N); } } return ans; } bool sub4 = true; std::vector<bool> ok(N, false); for (int i = 0; i < M; i++) if (A[i] == 0 || B[i] == 0) ok[A[i] + B[i]] = true; for (int i = 1; i < N; i++) if (!ok[i]) sub4 = false; if (sub4) { for (int i = 0; i < 2 * N; i++) for (int j = 0; j < 2 * N; j++) ans[i][j] = 1; for (int i = 0; i < N; i++) { int row = i * 2; for (int j = 0; j < 2 * N; j++) ans[row][j] = i + 1; for (int j = 0; j < (int) adj[i].size(); j++) ans[row][j * 2] = adj[i][j] + 1; } return ans; } std::vector<bool> visited(N, false); std::function<void(int, int)> DFS; DFS = [&](int u) { visited[u] = true; euler_tour.push_back(u + 1); for (int v : adj[u]) { if (!visited[v]) { DFS(v); euler_tour.push_back(u + 1); } } }; DFS(0); ans.assign(3 * (int) euler_tour.size(), std::vector<int>(3 * (int) euler_tour.size(), 1)); int row = 0; for (int i = 0; i < (int) euler_tour.size(); i++) { int u = euler_tour[i]; for (int j = 0; j < 3 * (int) euler_tour.size(); j++) ans[row][j] = ans[row + 1][j] = ans[row + 2][j] = u; for (int j = 0; j < (int) adj[u - 1].size(); j++) ans[row + 1][j * 2] = adj[i][j] + 1; row += 3; } return ans; }

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

worldmap.cpp: In lambda function:
worldmap.cpp:62:36: error: no match for call to '(std::function<void(int, int)>) (int&)'
   62 |                                 DFS(v);
      |                                 ~~~^~~
In file included from /usr/include/c++/11/functional:59,
                 from worldmap.cpp:2:
/usr/include/c++/11/bits/std_function.h:586:7: note: candidate: '_Res std::function<_Res(_ArgTypes ...)>::operator()(_ArgTypes ...) const [with _Res = void; _ArgTypes = {int, int}]'
  586 |       operator()(_ArgTypes... __args) const
      |       ^~~~~~~~
/usr/include/c++/11/bits/std_function.h:586:7: note:   candidate expects 2 arguments, 1 provided
worldmap.cpp: In function 'std::vector<std::vector<int> > create_map(int, int, std::vector<int>, std::vector<int>)':
worldmap.cpp:66:9: error: no match for 'operator=' (operand types are 'std::function<void(int, int)>' and 'create_map(int, int, std::vector<int>, std::vector<int>)::<lambda(int)>')
   66 |         };
      |         ^
In file included from /usr/include/c++/11/functional:59,
                 from worldmap.cpp:2:
/usr/include/c++/11/bits/std_function.h:530:9: note: candidate: 'template<class _Functor> std::function<_Res(_ArgTypes ...)>::_Requires<std::function<_Res(_ArgTypes ...)>::_Callable<_Functor>, std::function<_Res(_ArgTypes ...)>&> std::function<_Res(_ArgTypes ...)>::operator=(_Functor&&) [with _Functor = _Functor; _Res = void; _ArgTypes = {int, int}]'
  530 |         operator=(_Functor&& __f)
      |         ^~~~~~~~
/usr/include/c++/11/bits/std_function.h:530:9: note:   template argument deduction/substitution failed:
In file included from /usr/include/c++/11/bits/move.h:57,
                 from /usr/include/c++/11/bits/stl_pair.h:59,
                 from /usr/include/c++/11/bits/stl_algobase.h:64,
                 from /usr/include/c++/11/vector:60,
                 from worldmap.h:1,
                 from worldmap.cpp:1:
/usr/include/c++/11/type_traits: In substitution of 'template<bool _Cond, class _Tp> using __enable_if_t = typename std::enable_if::type [with bool _Cond = false; _Tp = std::function<void(int, int)>&]':
/usr/include/c++/11/bits/std_function.h:353:8:   required by substitution of 'template<class _Res, class ... _ArgTypes> template<class _Cond, class _Tp> using _Requires = std::__enable_if_t<_Cond::value, _Tp> [with _Cond = std::function<void(int, int)>::_Callable<create_map(int, int, std::vector<int>, std::vector<int>)::<lambda(int)>, create_map(int, int, std::vector<int>, std::vector<int>)::<lambda(int)>, std::__invoke_result<create_map(int, int, std::vector<int>, std::vector<int>)::<lambda(int)>&, int, int> >; _Tp = std::function<void(int, int)>&; _Res = void; _ArgTypes = {int, int}]'
/usr/include/c++/11/bits/std_function.h:530:2:   required by substitution of 'template<class _Functor> std::function<void(int, int)>::_Requires<std::function<void(int, int)>::_Callable<_Functor, typename std::enable_if<(! std::is_same<typename std::remove_cv<typename std::remove_reference<_Tp>::type>::type, std::function<void(int, int)> >::value), std::decay<_Func> >::type::type, std::__invoke_result<typename std::enable_if<(! std::is_same<typename std::remove_cv<typename std::remove_reference<_Tp>::type>::type, std::function<void(int, int)> >::value), std::decay<_Func> >::type::type&, int, int> >, std::function<void(int, int)>&> std::function<void(int, int)>::operator=<_Functor>(_Functor&&) [with _Functor = create_map(int, int, std::vector<int>, std::vector<int>)::<lambda(int)>]'
worldmap.cpp:66:2:   required from here
/usr/include/c++/11/type_traits:2205:11: error: no type named 'type' in 'struct std::enable_if<false, std::function<void(int, int)>&>'
 2205 |     using __enable_if_t = typename enable_if<_Cond, _Tp>::type;
      |           ^~~~~~~~~~~~~
In file included from /usr/include/c++/11/functional:59,
                 from worldmap.cpp:2:
/usr/include/c++/11/bits/std_function.h:540:9: note: candidate: 'template<class _Functor> std::function<_Res(_ArgTypes ...)>& std::function<_Res(_ArgTypes ...)>::operator=(std::reference_wrapper<_Functor>) [with _Functor = _Functor; _Res = void; _ArgTypes = {int, int}]'
  540 |         operator=(reference_wrapper<_Functor> __f) noexcept
      |         ^~~~~~~~
/usr/include/c++/11/bits/std_function.h:540:9: note:   template argument deduction/substitution failed:
worldmap.cpp:66:9: note:   'create_map(int, int, std::vector<int>, std::vector<int>)::<lambda(int)>' is not derived from 'std::reference_wrapper<_Tp>'
   66 |         };
      |         ^
In file included from /usr/include/c++/11/functional:59,
                 from worldmap.cpp:2:
/usr/include/c++/11/bits/std_function.h:469:7: note: candidate: 'std::function<_Res(_ArgTypes ...)>& std::function<_Res(_ArgTypes ...)>::operator=(const std::function<_Res(_ArgTypes ...)>&) [with _Res = void; _ArgTypes = {int, int}]'
  469 |       operator=(const function& __x)
      |       ^~~~~~~~
/usr/include/c++/11/bits/std_function.h:469:33: note:   no known conversion for argument 1 from 'create_map(int, int, std::vector<int>, std::vector<int>)::<lambda(int)>' to 'const std::function<void(int, int)>&'
  469 |       operator=(const function& __x)
      |                 ~~~~~~~~~~~~~~~~^~~
/usr/include/c++/11/bits/std_function.h:487:7: note: candidate: 'std::function<_Res(_ArgTypes ...)>& std::function<_Res(_ArgTypes ...)>::operator=(std::function<_Res(_ArgTypes ...)>&&) [with _Res = void; _ArgTypes = {int, int}]'
  487 |       operator=(function&& __x) noexcept
      |       ^~~~~~~~
/usr/include/c++/11/bits/std_function.h:487:28: note:   no known conversion for argument 1 from 'create_map(int, int, std::vector<int>, std::vector<int>)::<lambda(int)>' to 'std::function<void(int, int)>&&'
  487 |       operator=(function&& __x) noexcept
      |                 ~~~~~~~~~~~^~~
/usr/include/c++/11/bits/std_function.h:501:7: note: candidate: 'std::function<_Res(_ArgTypes ...)>& std::function<_Res(_ArgTypes ...)>::operator=(std::nullptr_t) [with _Res = void; _ArgTypes = {int, int}; std::nullptr_t = std::nullptr_t]'
  501 |       operator=(nullptr_t) noexcept
      |       ^~~~~~~~
/usr/include/c++/11/bits/std_function.h:501:17: note:   no known conversion for argument 1 from 'create_map(int, int, std::vector<int>, std::vector<int>)::<lambda(int)>' to 'std::nullptr_t'
  501 |       operator=(nullptr_t) noexcept
      |                 ^~~~~~~~~
worldmap.cpp:67:12: error: no match for call to '(std::function<void(int, int)>) (int)'
   67 |         DFS(0);
      |         ~~~^~~
In file included from /usr/include/c++/11/functional:59,
                 from worldmap.cpp:2:
/usr/include/c++/11/bits/std_function.h:586:7: note: candidate: '_Res std::function<_Res(_ArgTypes ...)>::operator()(_ArgTypes ...) const [with _Res = void; _ArgTypes = {int, int}]'
  586 |       operator()(_ArgTypes... __args) const
      |       ^~~~~~~~
/usr/include/c++/11/bits/std_function.h:586:7: note:   candidate expects 2 arguments, 1 provided