Problem: 2063C - Remove Exactly Two
Language: c++20 

Code 1:
#include<bits/stdc++.h>
using namespace std;
using i64=long long;
using u64=unsigned long long;
#define ll long long
const int inf=1e9;
const ll inff=1e18;
using i128=__int128;

void solve() {
    int n;
    cin>>n;
    vector<int> deg(n);
    vector<vector<int>> adj(n);
    for(int i=0;i<n-1;i++){
        int x,y;
        cin>>x>>y;
        x--,y--;
        deg[x]++,deg[y]++;
        adj[x].emplace_back(y);
        adj[y].emplace_back(x);
    }
    auto cmp=[&](int x,int y){
        return deg[x]<deg[y];
    };
    priority_queue<int,vector<int>,decltype(cmp)> pq(cmp);
    for(int i=0;i<n;i++){
        pq.push(i);
    }
    // int x=pq.top();
    // pq.pop();
    if(n==2){
        cout<<0<<'\n';
        return;
    }
    int a=pq.top();
    pq.pop();
    int b=pq.top();
    pq.pop();
    int c=pq.top();
    pq.pop();
    if(deg[a]==deg[b] && deg[b]==deg[c]){
        cout<<deg[a]*2-1<<'\n';
        return;
    }
    pq.push(b);
    pq.push(c);
    for(int y:adj[a]){
        deg[y]--;
    }
    int y=pq.top();
    int ans=deg[a]+deg[y]-1;
    // for(int v:adj[x]){
    //     ans=max(ans,deg[v]==0?deg[x]-1:deg[v]==1?deg[x]:deg[x]+deg[v]);
    // }
    cout<<ans<<"\n";
}

int main(){  
    ios::sync_with_stdio(0);cin.tie(0);
    int t=1;
    cin>>t; 
    while(t--){
        solve();
    }
    return 0;
}

Code 2:
#include<bits/stdc++.h>
using namespace std;
using i64=long long;
using u64=unsigned long long;
#define ll long long
const int inf=1e9;
const ll inff=1e18;
using i128=__int128;

void solve() {
    int n;
    cin>>n;
    vector<int> deg(n);
    vector<vector<int>> adj(n);
    for(int i=0;i<n-1;i++){
        int x,y;
        cin>>x>>y;
        x--,y--;
        deg[x]++,deg[y]++;
        adj[x].emplace_back(y);
        adj[y].emplace_back(x);
    }
    vector<int> it(n);
    iota(it.begin(),it.end(),0);
    sort(it.begin(),it.end(),[&](int x,int y){
        return deg[x]>deg[y];
    });
    if(n==2){
        cout<<0<<'\n';
        return;
    }
    int a=it[0],b=it[1],c=it[2];
    if(deg[a]==deg[b] && deg[b]==deg[c]){
        cout<<deg[a]*2-1<<'\n';
        return;
    }
    for(int y:adj[a]){
        deg[y]--;
    }
    sort(it.begin()+1,it.end(),[&](int x,int y){
        return deg[x]>deg[y];
    }); 
    cout<<deg[a]+deg[it[1]]-1<<'\n';
    // auto cmp=[&](int x,int y){
    //     return deg[x]<deg[y];
    // };
    // set<int,decltype(cmp)> st(cmp);
    // for(int i=0;i<n;i++){
    //     st.insert(i);
    // }
    // if(n==2){
    //     cout<<0<<'\n';
    //     return;
    // }
    // int a=*st.begin();
    // st.erase(st.begin());
    // int b=*st.begin();
    // st.erase(st.begin());
    // int c=*st.begin();
    // st.erase(st.begin());
    // if(deg[a]==deg[b] && deg[b]==deg[c]){
    //     cout<<deg[a]*2-1<<'\n';
    //     return;
    // }
    // st.insert(b);
    // st.insert(c);
    // for(int y:adj[a]){
    //     deg[y]--;
    // }
    // int y=*st.begin();
    // // while(pq.size()){
    // //     int y=pq.top();
    // //     cout<<y<<' '<<deg[y]<<'\n';
    // //     pq.pop();
    // // }
    // cout<<deg[a]+deg[y]-1<<"\n";
}

int main(){  
    ios::sync_with_stdio(0);cin.tie(0);
    int t=1;
    cin>>t; 
    while(t--){
        solve();
    }
    return 0;
}

Answer: 2