Problem: 2063C - Remove Exactly Two
Language: C++17 (GCC 7-32)

Previous submission (verdict: Wrong answer on test 2):
#include<bits/stdc++.h>
using namespace std;
vector<int> num;
int cmp(int a,int b)
{
    if(num[a]>num[b]) return 1;
    else return 0;
}
int main()
{
    cin.tie(0);
    ios::sync_with_stdio(false);
    int t;
    cin >> t;
    while(t--)
    {
        int n;
        cin >> n;
        num.resize(n+1);
        for(int i=1;i<=n;i++)
        {
            num[i] = 0;
        }
        vector<int> big(n+1);
        for(int i=1;i<=n;i++)
        {
            big[i] = i;
        }
        map<pair<int,int>,int> mp;
        for(int i=1;i<n;i++)
        {
            int u,v;
            cin >> u >> v;
            mp[{v,u}]++;
            mp[{u,v}]++;            
            num[u]++;
            num[v]++;
        }
        int ans = 1;
        sort(big.begin()+1,big.end(),cmp);
        if(num[big[1]]!=num[big[2]])
        {
            // cout <<"num "<< num[big[1]] << ' ' << num[big[2]] <<'\n';
            ans += num[big[1]]+num[big[2]]-3;
            int i = 2;
            while(i<=n&&num[big[i]]==num[big[2]])
            {
                if(!mp[{big[i],big[1]}])
                {
                    ans++;
                    break;
                }
                i++;
            }
            cout << ans <<'\n';
        }
        else
        {
            ans += 2*num[big[1]]-3;
            int k = 2;
            while(k<=n&&num[big[k]]==num[big[1]])
            {
                k++;
            }
            k--;
            if(k>=3) ans++;
            // int edge = 0;
            // for(auto& [a,_] : mp)
            // {
            //     if(a.first<=k&&a.second<=k) edge++;
            // }
        
            // if()
            cout << ans << '\n';
        }
    }
    return 0;
}

Submission (verdict: Accepted):
#include<bits/stdc++.h>
using namespace std;
vector<int> num;
int cmp(int a,int b)
{
    if(num[a]>num[b]) return 1;
    else return 0;
}
int main()
{
    cin.tie(0);
    ios::sync_with_stdio(false);
    int t;
    cin >> t;
    while(t--)
    {
        int n;
        cin >> n;
        num.resize(n+1);
        for(int i=1;i<=n;i++)
        {
            num[i] = 0;
        }
        vector<int> big(n+1);
        for(int i=1;i<=n;i++)
        {
            big[i] = i;
        }
        map<pair<int,int>,int> mp;
        for(int i=1;i<n;i++)
        {
            int u,v;
            cin >> u >> v;
            mp[{v,u}]++;
            mp[{u,v}]++;            
            num[u]++;
            num[v]++;
        }
        int ans = 1;
        sort(big.begin()+1,big.end(),cmp);
        if(num[big[1]]!=num[big[2]])
        {
            // cout <<"num "<< num[big[1]] << ' ' << num[big[2]] <<'\n';
            ans += num[big[1]]+num[big[2]]-3;
            int i = 2;
            while(i<=n&&num[big[i]]==num[big[2]])
            {
                if(!mp[{big[i],big[1]}])
                {
                    ans++;
                    break;
                }
                i++;
            }
            cout << ans <<'\n';
        }
        else
        {
            ans += 2*num[big[1]]-3;
            int k = 2;
            while(k<=n&&num[big[k]]==num[big[1]])
            {
                k++;
            }
            k--;
            if(k>=3) ans++;
            else
            {
                if(mp[{big[1],big[2]}]==0) ans++;
            }
            // int edge = 0;
            // for(auto& [a,_] : mp)
            // {
            //     if(a.first<=k&&a.second<=k) edge++;
            // }
        
            // if()
            cout << ans << '\n';
        }
    }
    return 0;
}