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

Previous submission (verdict: Runtime error on test 2):
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
//ll m = 1e9+7;


int main() {
	// your code goes here
    int t;
    cin>>t;
    while(t--){
        int n;
        cin>>n;
        vector<int> a[n+1];
        map<pair<int,int>, int> e;
        for(int i=1; i<n; i++){
            int u, v;
            cin>>u>>v;
            a[u].push_back(v);
            a[v].push_back(u);
            e[{u,v}]=1;
            e[{v,u}]=1;
        }
      //  cout<<"#";
        vector<int> p;
        map<int, vector<int>> m; 
        for(int i=1;i<=n;i++){
            p.push_back(a[i].size());
         //   cout<<a[i].size()<<" "<<i<<endl;
            m[a[i].size()].push_back(i);
        }
        sort(p.begin(), p.end());
        // for(auto i:p)
        //     cout<<i<<" ";
        // cout<<endl;
        int k=p.size(), ans;
       // cout<<k<<" "<<p[k-1]<<endl;
        if(m[p[k-1]].size()>2){
            ans=2*p[k-1]-1;
           // cout<<p[k-1]<<" " <<m[p[k-1]].size()<<endl;
        }
        else if(m[p[k-1]].size()==2){
           // cout<<"@";
            if(e.find({m[k-1][0],m[k-1][1]})==e.end()){
                ans=2*p[k-1]-1;
            }
            else
                ans=2*p[k-1]-2;
            
        }
        else{
            int s = m[p[k-2]].size();
          //  cout<<s<<endl;
            ans=p[k-1]+p[k-2]-2;
            for(int i=0;i<s;i++){
                if(e.find({m[p[k-2]][i], m[p[k-1]][0]})==e.end()){
                 //   cout<<m[p[k-2]][i]<<" "<<m[p[k-1]][0]<<endl;
                    ans=p[k-1]+p[k-2]-1;
                }
            }
        }
        // if(m.size()>0){
        //     if(m.size()==1){
        //         if(b==1)
        //             cout<<"2"<<endl;
        //         else
        //             cout
        //     }
        //     for(int i=1;i<=n;i++){
        //         if(m.find(i)!=m.end()){
        //             for(auto j : a[i]){
        //                 if(m.find(j))
        //             }
        //         }
        //     }
        // }
        // else{
        //     cout<<min(n-2, 3)<<endl;
        // }
        cout<<ans<<endl;
        
        
        
    }
        
}


Submission (verdict: Accepted):
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
//ll m = 1e9+7;


int main() {
	// your code goes here
    int t;
    cin>>t;
    while(t--){
        int n;
        cin>>n;
        vector<int> a[n+1];
        map<pair<int,int>, int> e;
        for(int i=1; i<n; i++){
            int u, v;
            cin>>u>>v;
            a[u].push_back(v);
            a[v].push_back(u);
            e[{u,v}]=1;
            e[{v,u}]=1;
        }
      //  cout<<"#";
        vector<int> p;
        map<int, vector<int>> m; 
        for(int i=1;i<=n;i++){
            p.push_back(a[i].size());
         //   cout<<a[i].size()<<" "<<i<<endl;
            m[a[i].size()].push_back(i);
        }
        sort(p.begin(), p.end());
        // for(auto i:p)
        //     cout<<i<<" ";
        // cout<<endl;
        int k=p.size(), ans;
       // cout<<k<<" "<<p[k-1]<<" " <<m[p[k-1]].size()<<endl;
        if(m[p[k-1]].size()>2){
            //cout<<"@";
            ans=2*p[k-1]-1;
           // cout<<p[k-1]<<" " <<m[p[k-1]].size()<<endl;
        }
        else if(m[p[k-1]].size()==2){
            //cout<<"@";
            if(e.find({m[p[k-1]][0],m[p[k-1]][1]})==e.end()){
                ans=2*p[k-1]-1;
            }
            else
                ans=2*p[k-1]-2;
            
        }
        else{
          //  cout<<"#";
            int s = m[p[k-2]].size();
           // cout<<s<<endl;
            ans=p[k-1]+p[k-2]-2;
            for(int i=0;i<s;i++){
                if(e.find({m[p[k-2]][i], m[p[k-1]][0]})==e.end()){
                 //   cout<<m[p[k-2]][i]<<" "<<m[p[k-1]][0]<<endl;
                    ans=p[k-1]+p[k-2]-1;
                }
            }
        }
        // if(m.size()>0){
        //     if(m.size()==1){
        //         if(b==1)
        //             cout<<"2"<<endl;
        //         else
        //             cout
        //     }
        //     for(int i=1;i<=n;i++){
        //         if(m.find(i)!=m.end()){
        //             for(auto j : a[i]){
        //                 if(m.find(j))
        //             }
        //         }
        //     }
        // }
        // else{
        //     cout<<min(n-2, 3)<<endl;
        // }
        cout<<ans<<endl;
        
        
        
    }
        
}