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;
#define int long long
struct node{
    int l;
    int r;
    int idx;

};
bool cmp(node a,node b){

    if(a.l!=b.l)return a.l<b.l;
    else return a.r<b.r;

}

int gcd(int a,int b){
    return b? gcd(b,a%b):a;
}
int lcm(int a,int b){
    return a*b/gcd(a,b);
}
int ans=0;

void func(int fa,int u,vector<vector<int>> &g,multiset<int> &st){
    if(g[u].size()==1&&u!=1) return ;
    int adjmax=0;
    for(int i=0;i<g[u].size();i++){
       adjmax=max(adjmax,(int)g[g[u][i]].size());
       st.erase(g[g[u][i]].size());
    }
    st.erase(g[u].size());
        ans=max(ans,adjmax+(int)g[u].size()-(int)2);
        if(!st.empty())ans=max(ans,(int)g[u].size()-(int)1+*st.rbegin());

        for(int i=0;i<g[u].size();i++){
          st.insert(g[g[u][i]].size());
        }
        st.insert(g[u].size());
           for(int i=0;i<g[u].size();i++){
             if(g[u][i]!=fa)func(u,g[u][i],g,st);
        }


}
signed main()
{
    int q;
    cin>>q;
    while(q>0){
        int n;
        cin>>n;
        vector<vector<int>> g(n+1);
        vector<int> degree(n+1,0);
        multiset<int> st;
        for(int i=0;i<n-1;i++){
            int u,v;
            cin>>u>>v;
            g[u].push_back(v);
            g[v].push_back(u);
            degree[u]++;
            degree[v]++;
        }
        for(int i=1;i<=n;i++){
            st.insert(degree[i]);
        }
        func(0,1,g,st);
        cout<<ans<<endl;
        ans=0;

        q--;
    }

    return 0;
}


Submission (verdict: Accepted):
#include <bits/stdc++.h>
using namespace std;
#define int long long
struct node{
    int l;
    int r;
    int idx;

};
bool cmp(node a,node b){

    if(a.l!=b.l)return a.l<b.l;
    else return a.r<b.r;

}

int gcd(int a,int b){
    return b? gcd(b,a%b):a;
}
int lcm(int a,int b){
    return a*b/gcd(a,b);
}
int ans=0;

void func(int fa,int u,vector<vector<int>> &g,multiset<int> &st){
   // cout<<"f**k "<<st.size()<<endl;
    if(g[u].size()==1&&u!=1) return ;
    int adjmax=0;
    for(int i=0;i<g[u].size();i++){
       adjmax=max(adjmax,(int)g[g[u][i]].size());
       auto it=st.find(g[g[u][i]].size());
       st.erase(it);
       //cout<<"erase "<<st.size()<<endl;
    }
    auto it=st.find(g[u].size());
    st.erase(it);
        ans=max(ans,adjmax+(int)g[u].size()-(int)2);
        if(!st.empty()){ans=max(ans,(int)g[u].size()-(int)1+*st.rbegin());}//cout<<*st.rbegin()<<endl;}

        for(int i=0;i<g[u].size();i++){
          st.insert(g[g[u][i]].size());
            //cout<<"set.size"<<" "<<st.size()<<endl;
        }
        st.insert(g[u].size());
            for(int i=0;i<g[u].size();i++){
             if(g[u][i]!=fa)func(u,g[u][i],g,st);
        }



}
signed main()
{
    int q;
    cin>>q;
    while(q>0){
        int n;
        cin>>n;
        vector<vector<int>> g(n+1);
        vector<int> degree(n+1,0);
        multiset<int> st;
        for(int i=0;i<n-1;i++){
            int u,v;
            cin>>u>>v;
            g[u].push_back(v);
            g[v].push_back(u);
            degree[u]++;
            degree[v]++;
        }
        for(int i=1;i<=n;i++){
            st.insert(degree[i]);
        }
        func(0,1,g,st);
        cout<<ans<<endl;
        ans=0;

        q--;
    }

    return 0;
}