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

Previous submission (verdict: Memory limit exceeded on test 2):
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
vector<int>v[200005];
int mxe=0,mxi=0;
bool vis[200005];
void dfs1(int i,int p)
{
    vis[i]=1;
    if(v[i].size()>=mxe)mxe=v[i].size(),mxi=i;
    for(auto j:v[i])
    {
        if(j!=p)dfs1(j,i);
    }
}
void dfs_rem(int i,int p)
{
    vis[i]=1;
    if(i == mxi)
    {
        for(auto j:v[i])
        {
            v[j].erase(find(v[j].begin(),v[j].end(),i));
        }
        v[i].clear();
        return;
    }
    for(auto j:v[i])
    {
        if(j!=p)dfs_rem(j,i);
    }
}
int32_t main()
{
    int t;
    cin>>t;
    while(t--)
    {
        cin>>n;
        for(int i=1;i<n;i++)
        {
            vis[i]=0;
            int x,y;
            cin>>x>>y;
            v[x].push_back(y);
            v[y].push_back(x);
        }
        mxe=0,mxi=0;
        dfs1(1,0);
        dfs_rem(1,0);

        int mxi2=mxi;
        mxe=0,mxi=0;
        for(int i=1;i<=n;i++)vis[i]=0;
        for(int i=1;i<=n;i++)
        {
            if(!vis[i] && i!=mxi2)
            {
                dfs1(i,0);
            }
        }
      //  cout<<mxi<<endl;
        for(int i=1;i<=n;i++)vis[i]=0;
        for(int i=1;i<=n;i++)
        {
            if(!vis[i] && i!=mxi2)
            {
                dfs_rem(i,0);
            }

        }
        //cout<<mxi<<" "<<mxi2<<endl;
        int c=0;
        for(int i=1;i<=n;i++)vis[i]=0;
        int mxi3=mxi;
        for(int i=1;i<=n;i++)
        {
            if(!vis[i] && i!=mxi3 && i!=mxi2)
            {
                dfs1(i,0);
                c++;
            }
        }
        cout<<c<<endl;

    }
}


Submission (verdict: Accepted):
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
vector<int>v[200005];
int mxe=0,mxi=0;
bool vis[200005];
void dfs1(int i,int p)
{
    vis[i]=1;
    if(v[i].size()>=mxe)mxe=v[i].size(),mxi=i;
    for(auto j:v[i])
    {
        if(j!=p)dfs1(j,i);
    }
}
void dfs_rem(int i,int p)
{
    vis[i]=1;
    if(i == mxi)
    {
        for(auto j:v[i])
        {
            v[j].erase(find(v[j].begin(),v[j].end(),i));
        }
        v[i].clear();
        return;
    }
    for(auto j:v[i])
    {
        if(j!=p)dfs_rem(j,i);
    }
}
int32_t main()
{
    int t;
    cin>>t;
    while(t--)
    {
        cin>>n;
        for(int i=1;i<=n;i++)v[i].clear();
        for(int i=1;i<n;i++)
        {
            vis[i]=0;
            int x,y;
            cin>>x>>y;
            v[x].push_back(y);
            v[y].push_back(x);
        }
        mxe=0,mxi=0;
        dfs1(1,0);
        dfs_rem(1,0);

        int mxi2=mxi;
        mxe=0,mxi=0;
        for(int i=1;i<=n;i++)vis[i]=0;
        for(int i=1;i<=n;i++)
        {
            if(!vis[i] && i!=mxi2)
            {
                dfs1(i,0);
            }
        }
      //  cout<<mxi<<endl;
        for(int i=1;i<=n;i++)vis[i]=0;
        for(int i=1;i<=n;i++)
        {
            if(!vis[i] && i!=mxi2)
            {
                dfs_rem(i,0);
            }

        }
        //cout<<mxi<<" "<<mxi2<<endl;
        int c=0;
        for(int i=1;i<=n;i++)vis[i]=0;
        int mxi3=mxi;
        for(int i=1;i<=n;i++)
        {
            if(!vis[i] && i!=mxi3 && i!=mxi2)
            {
                dfs1(i,0);
                c++;
            }
        }
        cout<<c<<endl;

    }
}