Language: C++

#include <bits/stdc++.h>

#define int long long
using namespace std;

template<class T>
ostream& operator<<(ostream& os, const vector<T> &vec){
    os << "[";
    for(int i=0;i<vec.size();i++){
        os << (i==0?"":" ") << vec[i];
    }
    os <<  "]";
    return os;
}


int getdepth(vector<int> &depth, vector<vector<int>> &edges){
    int n = edges.size();
    int husai = 0;
    depth[0] = 0;
    queue<pair<int,int>> q;
    q.push(make_pair(0, -1));
    int parent = -1;
    int accum_odd = 0;
    int accum_even = 0;
    int ret = 0;

    while(!q.empty()){
        auto t = q.front();
        q.pop();
        int now = t.first;
        int parent = t.second;

        if(depth[now]%2==0){
            ret += max(0, accum_odd - 1);
            accum_even++;
        }
        else{
            ret += max(0, accum_even-1);
            accum_odd++;
        }
        for(int e: edges[now]){
            if(e == parent)
                continue;
            else if(depth[e] != -1 && (depth[now] - depth[e])%2==0){
                return -1;
            }
            else if(depth[e] != -1 && depth[now] - depth[e] > 1){
                husai++;
            }
            else{
                depth[e] = depth[now] + 1;
                q.push(make_pair(e, now));
            }
        }
    }
    return ret - husai;
}

signed main(){
    int n, m;
    cin >> n >> m;
    vector<vector<int>> edges(n);
    for(int i=0;i<m;i++){
        int a, b;
        cin >> a >> b;
        a--, b--;
        edges[a].push_back(b);
        edges[b].push_back(a);
    }

    vector<int> depth(n, -1);

    int ret = getdepth(depth, edges);

    cout << (ret==-1?(n*(n-1)/2-m):ret) << endl;

    return 0;
}


Compiler output:
a.cc: In function 'long long int getdepth(std::vector<long long int>&, std::vector<std::vector<long long int> >&)':
a.cc:35:23: error: no matching function for call to 'max(int, long long int)'
   35 |             ret += max(0, accum_odd - 1);
      |                    ~~~^~~~~~~~~~~~~~~~~~
In file included 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_algobase.h:257:5: note: candidate: 'template<class _Tp> constexpr const _Tp& std::max(const _Tp&, const _Tp&)'
  257 |     max(const _Tp& __a, const _Tp& __b)
      |     ^~~
/usr/include/c++/14/bits/stl_algobase.h:257:5: note:   template argument deduction/substitution failed:
a.cc:35:23: note:   deduced conflicting types for parameter 'const _Tp' ('int' and 'long long int')
   35 |             ret += max(0, accum_odd - 1);
      |                    ~~~^~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/stl_algobase.h:303:5: note: candidate: 'template<class _Tp, class _Compare> constexpr const _Tp& std::max(const _Tp&, const _Tp&, _Compare)'
  303 |     max(const _Tp& __a, const _Tp& __b, _Compare __comp)
      |     ^~~
/usr/include/c++/14/bits/stl_algobase.h:303:5: note:   candidate expects 3 arguments, 2 provided
In file included from /usr/include/c++/14/algorithm:61:
/usr/include/c++/14/bits/stl_algo.h:5706:5: note: candidate: 'template<class _Tp> constexpr _Tp std::max(initializer_list<_Tp>)'
 5706 |     max(initializer_list<_Tp> __l)
      |     ^~~
/usr/include/c++/14/bits/stl_algo.h:5706:5: note:   candidate expects 1 argument, 2 provided
/usr/include/c++/14/bits/stl_algo.h:5716:5: note: candidate: 'template<class _Tp, class _Compare> constexpr _Tp std::max(initializer_list<_Tp>, _Compare)'
 5716 |     max(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
/usr/include/c++/14/bits/stl_algo.h:5716:5: note:   template argument deduction/substitution failed:
a.cc:35:23: note:   mismatched types 'std::initializer_list<_Tp>' and 'int'
   35 |             ret += max(0, accum_odd - 1);
      |                    ~~~^~~~~~~~~~~~~~~~~~
a.cc:39:23: error: no matching function for call to 'max(int, long long int)'
   39 |             ret += max(0, accum_even-1);
      |                    ~~~^~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/stl_algobase.h:257:5: note: candidate: 'template<class _Tp> constexpr const _Tp& std::max(const _Tp&, const _Tp&)'
  257 |     max(const _Tp& __a, const _Tp& __b)
      |     ^~~
/usr/include/c++/14/bits/stl_algobase.h:257:5: note:   template argument deduction/substitution failed:
a.cc:39:23: note:   deduced conflicting types for parameter 'const _Tp' ('int' and 'long long int')
   39 |             ret += max(0, accum_even-1);
      |                    ~~~^~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/stl_algobase.h:303:5: note: candidate: 'template<class _Tp, class _Compare> constexpr const _Tp& std::max(const _Tp&, const _Tp&, _Compare)'
  303 |     max(const _Tp& __a, const _Tp& __b, _Compare __comp)
      |     ^~~
/usr/include/c++/14/bits/stl_algobase.h:303:5: note:   candidate expects 3 arguments, 2 provided
/usr/include/c++/14/bits/stl_algo.h:5706:5: note: candidate: 'template<class _Tp> constexpr _Tp std::max(initializer_list<_Tp>)'
 5706 |     max(initializer_list<_Tp> __l)
      |     ^~~
/usr/include/c++/14/bits/stl_algo.h:5706:5: note:   candidate expects 1 argument, 2 provided
/usr/include/c++/14/bits/stl_algo.h:5716:5: note: candidate: 'template<class _Tp, class _Compare> constexpr _Tp std::max(initializer_list<_Tp>, _Compare)'
 5716 |     max(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
/usr/include/c++/14/bits/stl_algo.h:5716:5: note:   template argument deduction/substitution failed:
a.cc:39:23: note:   mismatched types 'std::initializer_list<_Tp>' and 'int'
   39 |             ret += max(0, accum_even-1);
      |                    ~~~^~~~~~~~~~~~~~~~~