Language: C++

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<ll,ll> pi;
typedef vector <ll> vi;
typedef vector <pi> vpi;
#define f first
#define s second
#define FOR(i,s,e) for(ll i=s;i<=ll(e);++i)
#define DEC(i,s,e) for(ll i=s;i>=ll(e);--i)
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define lbd(x, y) lower_bound(all(x), y)
#define ubd(x, y) upper_bound(all(x), y)
#define aFOR(i,x) for (auto i: x)
#define mem(x,i) memset(x,i,sizeof x)
#define fast ios_base::sync_with_stdio(false),cin.tie(0)
#define maxn 701
#define INF 1e9
#define int ll
int N,M;
vi adj[maxn];
bool matrix[maxn][maxn];
int num[maxn];
bool vis[maxn];
bool color[maxn];

int f(int a,int b){
	return (a*(a-1) + b*(b-1))/2;
}

bool np = 0;
pi sz[maxn];
void dfs(int x,int p){
	if (vis[x]) return;
	vis[x] = 1;
	
	
	if (color[x]) sz[p].s++;
	else sz[p].f++;
	
	aFOR(i,adj[x]){
		if (vis[i] && color[i] == color[x]){
			np = 1;
			break;
		}
		
		color[i] = !color[x];
		dfs(i,p);
	}
	return;
}
		
int32_t main(){
	fast;
	
	cin>>N>>M;
	
	FOR(i,0,M-1){
		int a,b; cin>>a>>b;
		matrix[a][b] = matrix[b][a] = 1;
	}
	
	FOR(i,1,N){
		FOR(j,i+1,N){
			//if (i == j) continue;
			if (!matrix[i][j]) adj[i].pb(j), adj[j].pb(i);
		}
	}
	
	vi vect;
	FOR(i,1,N){
		if (!vis[i]){
			vect.pb(i);
			dfs(i,i);
		}
	}
	
	if (np){
		cout<<-1;
		return 0;
	}
	
	
	set <int> dp[maxn];
	
	
	FOR(i,0,vect.size() - 1){
		//cout<<sz[vect[i]].f<<' '<<sz[vect[i]].s<<'\n';
		if (i == 0) dp[i] = set <int> ({sz[vect[i]].f,sz[vect[i]].s});
		else{
          
            aFOR(j,dp[i-1]) dp[i].insert(j + sz[vect[i]].f;

			
			aFOR(j,dp[i-1]) dp[i].insert(j + sz[vect[i]].s);
		}
	}
	
	sort(all(dp[vect.size()-1]));
	
	int idx = lower_bound(all(dp[vect.size()-1]),(double)N/(double)2) - dp[vect.size()-1].begin();
	int ans;
	if (idx == 0) ans = f(dp[vect.size()-1][idx],N - dp[vect.size()-1][idx]);
	else ans = min(f(dp[vect.size()-1][idx],N - dp[vect.size()-1][idx]),f(dp[vect.size()-1][idx-1],N - dp[vect.size()-1][idx-1]));
	
	cout<<ans;
}


Compiler output:
a.cc: In function 'int32_t main()':
a.cc:94:59: error: expected ')' before ';' token
   94 |             aFOR(j,dp[i-1]) dp[i].insert(j + sz[vect[i]].f;
      |                                         ~                 ^
a.cc:103:75: error: no match for 'operator-' (operand types are 'std::_Rb_tree_const_iterator<long long int>' and 'std::set<long long int>::iterator' {aka 'std::_Rb_tree<long long int, long long int, std::_Identity<long long int>, std::less<long long int>, std::allocator<long long int> >::const_iterator'})
  103 |         int idx = lower_bound(all(dp[vect.size()-1]),(double)N/(double)2) - dp[vect.size()-1].begin();
      |                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~
      |                              |                                                                     |
      |                              _Rb_tree_const_iterator<[...]>                                        _Rb_tree_const_iterator<[...]>
In file included from /usr/include/c++/14/bits/stl_algobase.h:67,
                 from /usr/include/c++/14/algorithm:60,
                 from /usr/include/x86_64-linux-gnu/c++/14/bits/stdc++.h:51,
                 from a.cc:1:
/usr/include/c++/14/bits/stl_iterator.h:618:5: note: candidate: 'template<class _IteratorL, class _IteratorR> constexpr decltype ((__y.base() - __x.base())) std::operator-(const reverse_iterator<_Iterator>&, const reverse_iterator<_IteratorR>&)'
  618 |     operator-(const reverse_iterator<_IteratorL>& __x,
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_iterator.h:618:5: note:   template argument deduction/substitution failed:
a.cc:103:101: note:   'std::_Rb_tree_const_iterator<long long int>' is not derived from 'const std::reverse_iterator<_Iterator>'
  103 |         int idx = lower_bound(all(dp[vect.size()-1]),(double)N/(double)2) - dp[vect.size()-1].begin();
      |                                                                                                     ^
/usr/include/c++/14/bits/stl_iterator.h:1790:5: note: candidate: 'template<class _IteratorL, class _IteratorR> constexpr decltype ((__x.base() - __y.base())) std::operator-(const move_iterator<_IteratorL>&, const move_iterator<_IteratorR>&)'
 1790 |     operator-(const move_iterator<_IteratorL>& __x,
      |     ^~~~~~~~
/usr/include/c++/14/bits/stl_iterator.h:1790:5: note:   template argument deduction/substitution failed:
a.cc:103:101: note:   'std::_Rb_tree_const_iterator<long long int>' is not derived from 'const std::move_iterator<_IteratorL>'
  103 |         int idx = lower_bound(all(dp[vect.size()-1]),(double)N/(double)2) - dp[vect.size()-1].begin();
      |                                                                                                     ^
In file included from /usr/include/c++/14/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/14/bits/stdc++.h:127:
/usr/include/c++/14/complex:370:5: note: candidate: 'template<class _Tp> std::complex<_Tp> std::operator-(const complex<_Tp>&, const complex<_Tp>&)'
  370 |     operator-(const complex<_Tp>& __x, const complex<_Tp>& __y)
      |     ^~~~~~~~
/usr/include/c++/14/complex:370:5: note:   template argument deduction/substitution failed:
a.cc:103:101: note:   'std::_Rb_tree_const_iterator<long long int>' is not derived from 'const std::complex<_Tp>'
  103 |         int idx = lower_bound(all(dp[vect.size()-1]),(double)N/(double)2) - dp[vect.size()-1].begin();
      |                                                                                                     ^
/usr/include/c++/14/complex:379:5: note: candidate: 'template<class _Tp> std::complex<_Tp> std::operator-(const complex<_Tp>&, const _Tp&)'
  379 |     operator-(const complex<_Tp>& __x, const _Tp& __y)
      |     ^~~~~~~~
/usr/include/c++/14/complex:379:5: note:   template argument deduction/substitution failed:
a.cc:103:101: note:   'std::_Rb_tree_const_iterator<long long int>' is not derived from 'const std::complex<_Tp>'
  103 |         int idx = lower_bound(all(dp[vect.size()-1]),(double)N/(double)2) - dp[vect.size()-1].begin();
      |                                                                                                     ^
/usr/include/c++/14/complex:388:5: note: candidate: 'template<class _Tp> std::complex<_Tp> std::operator-(const _Tp&, const complex<_Tp>&)'
  388 |     operator-(const _Tp& __x, const complex<_Tp>& __y)
      |     ^~~~~~~~
/usr/include/c++/14/complex:388:5: note:   template argument deduction/substitution failed:
a.cc:103:101: note:   'std::set<long long int>::iterator' {aka 'std::_Rb_tree<long long int, long long int, std::_Identity<long long int>, std::less<long long int>, std::allocator<long long int> >::const_iterator'} is not derived from 'const std::complex<_Tp>'
  103 |         int idx = lower_bound(all(dp[vect.size()-1]),(double)N/(double)2) - dp[vect.size()-1].begin();
      |                                                                                                     ^
/usr/include/c++/14/complex:465:5: note: candidate: 'template<class _Tp> std::complex<_Tp> std::operator-(const complex<_Tp>&)'
  465 |     operator-(const complex<_Tp>& __x)
      |     ^~~~~~~~
/usr/include/c++/14/complex:465:5: note:   candidate expects 1 argument, 2 provided
In file included from /usr/include/c++/14/valarray:605,
                 from /usr/include/x86_64-linux-gnu/c++/14/bits/stdc++.h:166:
/usr/include/c++/14/bits/valarray_after.h:406:5: note: candidate: 'template<class _Dom1, class _Dom2> std::_Expr<std::__detail::_BinClos<std::__minus, std::_Expr, std::_Expr, _Dom1, _Dom2>, typename std::__fun<std::__minus, typename _Dom1::value_type>::result_type> std::operator-(const _Expr<_Dom1, typename _Dom1::value_type>&, const _Expr<_Dom2, typename _Dom2::value_type>&)'
  406 |     _DEFINE_EXPR_BINARY_OPERATOR(-, struct std::__minus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/valarray_after.h:406:5: note:   template argument deduction/substitution failed:
a.cc:103:101: note:   'std::_Rb_tree_const_iterator<long long int>' is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>'
  103 |         int idx = lower_bound(all(dp[vect.size()-1]),(double)N/(double)2) - dp[vect.size()-1].begin();
      |                                                                                                     ^
/usr/include/c++/14/bits/valarray_after.h:406:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__minus, std::_Expr, std::_Constant, _Dom, typename _Dom::value_type>, typename std::__fun<std::__minus, typename _Dom1::value_type>::result_type> std::operator-(const _Expr<_Dom1, typename _Dom1::value_type>&, const typename _Dom::value_type&)'
  406 |     _DEFINE_EXPR_BINARY_OPERATOR(-, struct std::__minus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/valarray_after.h:406:5: note:   template argument deduction/substitution failed:
a.cc:103:101: note:   'std::_Rb_tree_const_iterator<long long int>' is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>'
  103 |         int idx = lower_bound(all(dp[vect.size()-1]),(double)N/(double)2) - dp[vect.size()-1].begin();
      |                                                                                                     ^
/usr/include/c++/14/bits/valarray_after.h:406:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__minus, std::_Constant, std::_Expr, typename _Dom::value_type, _Dom>, typename std::__fun<std::__minus, typename _Dom1::value_type>::result_type> std::operator-(const typename _Dom::value_type&, const _Expr<_Dom1, typename _Dom1::value_type>&)'
  406 |     _DEFINE_EXPR_BINARY_OPERATOR(-, struct std::__minus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/valarray_after.h:406:5: note:   template argument deduction/substitution failed:
a.cc:103:101: note:   'std::set<long long int>::iterator' {aka 'std::_Rb_tree<long long int, long long int, std::_Identity<long long int>, std::less<long long int>, std::allocator<long long int> >::const_iterator'} is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>'
  103 |         int idx = lower_bound(all(dp[vect.size()-1]),(double)N/(double)2) - dp[vect.size()-1].begin();
      |                                                                                                     ^
/usr/include/c++/14/bits/valarray_after.h:406:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__minus, std::_Expr, std::_ValArray, _Dom, typename _Dom::value_type>, typename std::__fun<std::__minus, typename _Dom1::value_type>::result_type> std::operator-(const _Expr<_Dom1, typename _Dom1::value_type>&, const valarray<typename _Dom::value_type>&)'
  406 |     _DEFINE_EXPR_BINARY_OPERATOR(-, struct std::__minus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/valarray_after.h:406:5: note:   template argument deduction/substitution failed:
a.cc:103:101: note:   'std::_Rb_tree_const_iterator<long long int>' is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>'
  103 |         int idx = lower_bound(all(dp[vect.size()-1]),(double)N/(double)2) - dp[vect.size()-1].begin();
      |                                                                                                     ^
/usr/include/c++/14/bits/valarray_after.h:406:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__minus, std::_ValArray, std::_Expr, typename _Dom::value_type, _Dom>, typename std::__fun<std::__minus, typename _Dom1::value_type>::result_type> std::operator-(const valarray<typename _Dom::value_type>&, const _Expr<_Dom1, typename _Dom1::value_type>&)'
  406 |     _DEFINE_EXPR_BINARY_OPERATOR(-, struct std::__minus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/valarray_after.h:406:5: note:   template argument deduction/substitution failed:
a.cc:103:101: note:   'std::set<long long int>::iterator' {aka 'std::_Rb_tree<long long int, long long int, std::_Identity<long long int>, std::less<long long int>, std::allocator<long long int> >::const_iterator'} is not derived from