제출 #637368

#제출 시각아이디문제언어결과실행 시간메모리
637368FidanThousands Islands (IOI22_islands)C++17
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>
#include <variant>
#include "islands.h"
using namespace std;
typedef int ll;
void dfs1(ll k, vector<vector<pair<ll, ll>>> &g, vector<bool> &used){
	if(used[k]) return;
	used[k]=true;
	for(ll i=0; i<g[k].size(); i++){
		dfs1(g[k][i].first, g, used);
	}
}
vector<ll> s;
vector<ll> color;
int dfs(ll k, vector<vector<ll>> &g, vector<bool> &used){
	color[k]=1;
	s.push_back(k);
	for(ll i: g[k]){
		if(color[i]==0){
			int d=dfs(i, g, used);
			if(d!=0){
				return d;
			}
		}
		else if(color[i]==1){
			return i;
		}
	}
	s.pop_back();
	color[k]=2;
	return -1;
}
variant<bool, vector<int>> find_journey(int n, int m, vector<int> u, vector<int> v){
	bool bo=true;
	if(m%2==1) bo=false;
	if(bo){
		for(ll i=0; i<m; i+=2){
			if(u[i]!=v[i+1] || u[i+1]!=v[i]) bo=false;
		}
	}
	if(n==2){
		ll a=-1, b=-1, c=-1;
		for(ll i=0; i<m; i++){
			if(u[i]==0){
				if(a==-1) a=i;
				else b=i;
			}
			else c=i;
		}
		if(b==-1 || c==-1) return false;
		return vector<int>({a, c, b, a, c, b});
	}
	else if(m==n*(n-1)){
		ll a=-1, b=-1, c=-1, d=-1, e=-1, f=-1;
		for(ll i=0; i<m; i++){
			if(u[i]==0 && v[i]==1) a=i;
			if(u[i]==1 && v[i]==0) b=i;
			if(u[i]==1 && v[i]==2) c=i;
			if(u[i]==2 && v[i]==1) d=i;
			if(u[i]==2 && v[i]==0) e=i;
			if(u[i]==0 && v[i]==2) f=i;
		}
		return vector<int>({a, c, e, f, d, b, e, c, a, b, d, f});
	}
	else if(bo){
		vector<vector<pair<ll, ll>>> g(n);
		vector<ll> res, res1;
		for(ll i=0; i<m; i++){
			g[u[i]].push_back({v[i], i});
		}
		if(g[0].size()>=2){
			ll a=g[0][0].second, b=g[0][1].second;
			ll a1, b1;
			if(a%2==0) a1=a+1;
			else a1=a-1;
			if(b%2==0) b1=b+1;
			else b1=b-1;
			return vector<int>({a, a1, b, b1, a1, a, b1, b});
		}
		else{
			bool f=false;
			vector<bool> used(n);
			dfs1(0, g, used);
			for(ll i=0; i<n; i++){
				if(used[i] && g[i].size()>=3) f=true;
			}
			if(!f) return false;
			ll l=g[0][0].first, k=0;
			res1.push_back(g[0][0].second);
			res.push_back(g[0][0].second);
			while(g[l].size()<3){
				if(g[l][0].first==k){
					res1.push_back(g[l][1].second);
					res.push_back(g[l][1].second);
					k=l;
					l=g[l][1].first;
				}
				else{
					res1.push_back(g[l][0].second);
					res.push_back(g[l][0].second);
					k=l;
					l=g[l][0].first;
				}
			}
			ll a=-1, b=-1;
			for(ll i=0; i<3; i++){
				if(g[l][i].first!=k){
					if(a==-1) a=g[l][i].second;
					else b=g[l][i].second;
				}
			}
			ll a1, b1;
			if(a%2==0) a1=a+1;
			else a1=a-1;
			if(b%2==0) b1=b+1;
			else b1=b-1;
			res.push_back(a);
			res.push_back(a1);
			res.push_back(b);
			res.push_back(b1);
			res.push_back(a1);
			res.push_back(a);
			res.push_back(b1);
			res.push_back(b);
			reverse(res1.begin(), res1.end());
			for(ll asdf:res1) res.push_back(asdf);
			return res;
		}	
	}
	else{
		vector<vector<ll>> g(n);
		color.resize(n);
		vector<vector<vector<ll>>> gr(n, vector<pair<ll, ll>> (n));
		for(ll i=0; i<m; i++){
			g[u[i]].push_back(v[i]);
			if(gr[u[i]][v[i]].first==-1) gr[u[i]][v[i]].first=i;
			else gr[u[i]][v[i]].second=i; 
		}
		vector<bool> used(n, false);
		int f=dfs(0, g, used);
		if(f==-1) return false;
		s.push_back(f);
		ll qw=s.size();
		vector<ll> to, c;
		ll l=0;
		for(ll i=0; i<qw; i++){
			to.push_back(s[i]);
			l=i; 
			if(s[i]==s[qw-1]) break;
		}
		for(ll i=l; i<qw; i++){
			c.push_back(s[i]);
		}
		vector<ll> res;
		for(ll i=0; i<to.size()-1; i++){
			res.push_back(gr[to[i]][to[i+1]].first);
		}
		for(ll i=0; i<c.size()-1; i++){
			res.push_back(gr[c[i]][c[i+1]].first);
		}
		for(ll i=0; i<c.size()-1; i++){
			res.push_back(gr[c[i]][c[i+1]].second);
		}
		for(ll i=c.size()-2; i>=0; i--){
			res.push_back(gr[c[i]][c[i+1]].first);
		}
		for(ll i=c.size()-2; i>=0; i--){
			res.push_back(gr[c[i]][c[i+1]].second);
		}
		for(ll i=to.size()-2; i>=0; i--){
			res.push_back(gr[to[i]][to[i+1]].first);
		}
		return res;
	}
}

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

islands.cpp: In function 'void dfs1(ll, std::vector<std::vector<std::pair<int, int> > >&, std::vector<bool>&)':
islands.cpp:9:15: warning: comparison of integer expressions of different signedness: 'll' {aka 'int'} and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    9 |  for(ll i=0; i<g[k].size(); i++){
      |              ~^~~~~~~~~~~~
islands.cpp: In function 'std::variant<bool, std::vector<int, std::allocator<int> > > find_journey(int, int, std::vector<int>, std::vector<int>)':
islands.cpp:133:60: error: no matching function for call to 'std::vector<std::vector<std::vector<int> > >::vector(int&, std::vector<std::pair<int, int> >)'
  133 |   vector<vector<vector<ll>>> gr(n, vector<pair<ll, ll>> (n));
      |                                                            ^
In file included from /usr/include/c++/10/vector:67,
                 from /usr/include/c++/10/functional:62,
                 from /usr/include/c++/10/pstl/glue_algorithm_defs.h:13,
                 from /usr/include/c++/10/algorithm:74,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from islands.cpp:1:
/usr/include/c++/10/bits/stl_vector.h:653:2: note: candidate: 'template<class _InputIterator, class> std::vector<_Tp, _Alloc>::vector(_InputIterator, _InputIterator, const allocator_type&) [with _InputIterator = _InputIterator; <template-parameter-2-2> = <template-parameter-1-2>; _Tp = std::vector<std::vector<int> >; _Alloc = std::allocator<std::vector<std::vector<int> > >]'
  653 |  vector(_InputIterator __first, _InputIterator __last,
      |  ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:653:2: note:   template argument deduction/substitution failed:
islands.cpp:133:60: note:   deduced conflicting types for parameter '_InputIterator' ('int' and 'std::vector<std::pair<int, int> >')
  133 |   vector<vector<vector<ll>>> gr(n, vector<pair<ll, ll>> (n));
      |                                                            ^
In file included from /usr/include/c++/10/vector:67,
                 from /usr/include/c++/10/functional:62,
                 from /usr/include/c++/10/pstl/glue_algorithm_defs.h:13,
                 from /usr/include/c++/10/algorithm:74,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from islands.cpp:1:
/usr/include/c++/10/bits/stl_vector.h:625:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector(std::initializer_list<_Tp>, const allocator_type&) [with _Tp = std::vector<std::vector<int> >; _Alloc = std::allocator<std::vector<std::vector<int> > >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::vector<std::vector<int> > >]'
  625 |       vector(initializer_list<value_type> __l,
      |       ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:625:43: note:   no known conversion for argument 1 from 'int' to 'std::initializer_list<std::vector<std::vector<int> > >'
  625 |       vector(initializer_list<value_type> __l,
      |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/stl_vector.h:607:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>&&, const allocator_type&) [with _Tp = std::vector<std::vector<int> >; _Alloc = std::allocator<std::vector<std::vector<int> > >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::vector<std::vector<int> > >]'
  607 |       vector(vector&& __rv, const allocator_type& __m)
      |       ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:607:23: note:   no known conversion for argument 1 from 'int' to 'std::vector<std::vector<std::vector<int> > >&&'
  607 |       vector(vector&& __rv, const allocator_type& __m)
      |              ~~~~~~~~~^~~~
/usr/include/c++/10/bits/stl_vector.h:589:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>&&, const allocator_type&, std::false_type) [with _Tp = std::vector<std::vector<int> >; _Alloc = std::allocator<std::vector<std::vector<int> > >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::vector<std::vector<int> > >; std::false_type = std::integral_constant<bool, false>]'
  589 |       vector(vector&& __rv, const allocator_type& __m, false_type)
      |       ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:589:7: note:   candidate expects 3 arguments, 2 provided
/usr/include/c++/10/bits/stl_vector.h:585:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>&&, const allocator_type&, std::true_type) [with _Tp = std::vector<std::vector<int> >; _Alloc = std::allocator<std::vector<std::vector<int> > >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::vector<std::vector<int> > >; std::true_type = std::integral_constant<bool, true>]'
  585 |       vector(vector&& __rv, const allocator_type& __m, true_type) noexcept
      |       ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:585:7: note:   candidate expects 3 arguments, 2 provided
/usr/include/c++/10/bits/stl_vector.h:575:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&, const allocator_type&) [with _Tp = std::vector<std::vector<int> >; _Alloc = std::allocator<std::vector<std::vector<int> > >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::vector<std::vector<int> > >]'
  575 |       vector(const vector& __x, const allocator_type& __a)
      |       ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:575:28: note:   no known conversion for argument 1 from 'int' to 'const std::vector<std::vector<std::vector<int> > >&'
  575 |       vector(const vector& __x, const allocator_type& __a)
      |              ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/stl_vector.h:572:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>&&) [with _Tp = std::vector<std::vector<int> >; _Alloc = std::allocator<std::vector<std::vector<int> > >]'
  572 |       vector(vector&&) noexcept = default;
      |       ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:572:7: note:   candidate expects 1 argument, 2 provided
/usr/include/c++/10/bits/stl_vector.h:553:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = std::vector<std::vector<int> >; _Alloc = std::allocator<std::vector<std::vector<int> > >]'
  553 |       vector(const vector& __x)
      |       ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:553:7: note:   candidate expects 1 argument, 2 provided
/usr/include/c++/10/bits/stl_vector.h:522:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>::size_type, const value_type&, const allocator_type&) [with _Tp = std::vector<std::vector<int> >; _Alloc = std::allocator<std::vector<std::vector<int> > >; std::vector<_Tp, _Alloc>::size_type = long unsigned int; std::vector<_Tp, _Alloc>::value_type = std::vector<std::vector<int> >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::vector<std::vector<int> > >]'
  522 |       vector(size_type __n, const value_type& __value,
      |       ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:522:47: note:   no known conversion for argument 2 from 'std::vector<std::pair<int, int> >' to 'const value_type&' {aka 'const std::vector<std::vector<int> >&'}
  522 |       vector(size_type __n, const value_type& __value,
      |                             ~~~~~~~~~~~~~~~~~~^~~~~~~
/usr/include/c++/10/bits/stl_vector.h:510:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>::size_type, const allocator_type&) [with _Tp = std::vector<std::vector<int> >; _Alloc = std::allocator<std::vector<std::vector<int> > >; std::vector<_Tp, _Alloc>::size_type = long unsigned int; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::vector<std::vector<int> > >]'
  510 |       vector(size_type __n, const allocator_type& __a = allocator_type())
      |       ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:510:51: note:   no known conversion for argument 2 from 'std::vector<std::pair<int, int> >' to 'const allocator_type&' {aka 'const std::allocator<std::vector<std::vector<int> > >&'}
  510 |       vector(size_type __n, const allocator_type& __a = allocator_type())
      |                             ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/10/bits/stl_vector.h:497:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector(const allocator_type&) [with _Tp = std::vector<std::vector<int> >; _Alloc = std::allocator<std::vector<std::vector<int> > >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::vector<std::vector<int> > >]'
  497 |       vector(const allocator_type& __a) _GLIBCXX_NOEXCEPT
      |       ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:497:7: note:   candidate expects 1 argument, 2 provided
/usr/include/c++/10/bits/stl_vector.h:487:7: note: candidate: 'std::vector<_Tp, _Alloc>::vector() [with _Tp = std::vector<std::vector<int> >; _Alloc = std::allocator<std::vector<std::vector<int> > >]'
  487 |       vector() = default;
      |       ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:487:7: note:   candidate expects 0 arguments, 2 provided
islands.cpp:136:22: error: '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'class std::vector<int>'} has no member named 'first'
  136 |    if(gr[u[i]][v[i]].first==-1) gr[u[i]][v[i]].first=i;
      |                      ^~~~~
islands.cpp:136:48: error: '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'class std::vector<int>'} has no member named 'first'
  136 |    if(gr[u[i]][v[i]].first==-1) gr[u[i]][v[i]].first=i;
      |                                                ^~~~~
islands.cpp:137:24: error: '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'class std::vector<int>'} has no member named 'second'
  137 |    else gr[u[i]][v[i]].second=i;
      |                        ^~~~~~
islands.cpp:155:16: warning: comparison of integer expressions of different signedness: 'll' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  155 |   for(ll i=0; i<to.size()-1; i++){
      |               ~^~~~~~~~~~~~
islands.cpp:156:37: error: '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'class std::vector<int>'} has no member named 'first'
  156 |    res.push_back(gr[to[i]][to[i+1]].first);
      |                                     ^~~~~
islands.cpp:158:16: warning: comparison of integer expressions of different signedness: 'll' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  158 |   for(ll i=0; i<c.size()-1; i++){
      |               ~^~~~~~~~~~~
islands.cpp:159:35: error: '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'class std::vector<int>'} has no member named 'first'
  159 |    res.push_back(gr[c[i]][c[i+1]].first);
      |                                   ^~~~~
islands.cpp:161:16: warning: comparison of integer expressions of different signedness: 'll' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  161 |   for(ll i=0; i<c.size()-1; i++){
      |               ~^~~~~~~~~~~
islands.cpp:162:35: error: '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'class std::vector<int>'} has no member named 'second'
  162 |    res.push_back(gr[c[i]][c[i+1]].second);
      |                                   ^~~~~~
islands.cpp:165:35: error: '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'class std::vector<int>'} has no member named 'first'
  165 |    res.push_back(gr[c[i]][c[i+1]].first);
      |                                   ^~~~~
islands.cpp:168:35: error: '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'class std::vector<int>'} has no member named 'second'
  168 |    res.push_back(gr[c[i]][c[i+1]].second);
      |                                   ^~~~~~
islands.cpp:171:37: error: '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'class std::vector<int>'} has no member named 'first'
  171 |    res.push_back(gr[to[i]][to[i+1]].first);
      |                                     ^~~~~