Problem: 2063C - Remove Exactly Two
Language: C++23 (GCC 14-64, msys2)

Previous submission (verdict: Wrong answer on test 2):
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
void dfs(int curr,vector<int> adj[],vector<bool> &vis){
    vis[curr]=true;
    for(int &child:adj[curr]){
        if(vis[child]==false) dfs(child,adj,vis);
    }
}
int num_cc(vector<int> adj[],int n,int v1,int v2){
    int ans{};
    vector<bool> vis(n,false);
    for(int i=0;i<n;i++){
        if(vis[i]==false && i!=v1 && i!=v2){
            ans++;
            dfs(i,adj,vis);
        }
    }
    return ans;
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int t;
    cin>>t;
     while(t--){
        int n;
        cin>>n;
        vector<int> adj[n];
        for(int i=0;i<n-1;i++){
            int a,b;
            cin>>a>>b;
            adj[a-1].push_back(b-1);
            adj[b-1].push_back(a-1);
        }
        if(n==2){
            cout<<0<<'\n';
            continue;
        }
        int v1,v2{-1},m1{},m2{};
        for(int i=0;i<n;i++){
            if(adj[i].size()>m1){
                m1=adj[i].size();
                v1=i;
            }
        }
        for(int i=0;i<n;i++){
            if(i==v1){
                adj[i].clear();
                continue;
            }
            adj[i].erase(remove(adj[i].begin(),adj[i].end(),v1),adj[i].end());
        }
        for(int i=0;i<n;i++){
            if(adj[i].size()>m2){
                m2=adj[i].size();
                v2=i;
            }
        }
        if(v2==-1){
            for(int i=0;i<n;i++){
                if(i!=v1){
                    v2=i;
                    break;
                }
            }
        }
        else{
            for(int i=0;i<n;i++){
                if(i==v2){
                    adj[i].clear();
                    continue;
                }
                adj[i].erase(remove(adj[i].begin(),adj[i].end(),v2),adj[i].end());
            }
        }
        int ans=num_cc(adj,n,v1,v2);
        cout<<ans<<'\n';
    }
}

Submission (verdict: Wrong answer on test 2):
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int t;
    cin>>t;
     while(t--){
        int n;
        cin>>n;
        vector<int> adj[n];
        for(int i=0;i<n-1;i++){
            int a,b;
            cin>>a>>b;
            adj[a-1].push_back(b-1);
            adj[b-1].push_back(a-1);
        }
        unordered_map <int,int> m;
        for(int i=0;i<n;i++){
            m[i]=adj[i].size();
        }
        int ans{};
        set <pair<int,int>> adj_pairs;
        for(int i=0;i<n;i++){
            for(int &j:adj[i]){
                ans=max(ans,m[i]+m[j]-2);
                adj_pairs.insert({i,j});
            }
        }
        vector<pair<int,int>> temp(n);
        for(int i=0;i<n;i++) temp.emplace_back(m[i],i);
        sort(temp.begin(),temp.end(),[](pair<int,int> p1,pair<int,int> p2){return p1.first>p2.first;});
        for(int i=0;i<n-1;i++){
            if(!adj_pairs.count({temp[i].second,temp[i+1].second})){
                ans=max(ans,temp[i].first+temp[i+1].first-1);
                break;
            }
        }
        cout<<ans<<'\n';
    }
}