#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+10;
int edge[maxn];

int main()
{
    int n;cin >> n;
    int ui,vi;
    for(int i = 1;i<=n-1;i++) {
        cin >> ui >> vi;
        edge[ui]++;edge[vi]++;
    }
    int ans = INT_MIN;
    for(int i = 1;i<=n;i++) {
        ans = max(ans,edge[i]);
    }
    int number = 1;
    while (edge[number] == ans) {
        number++;
    }
    
    if(n<=2) cout << "1 1";
    else cout << ans - 1 << ' ' << number;

    return 0;
}

感觉本题提不出更好的思路了,如有雷同,敬请谅解

我们很明显可以知道,树是一个n-1条边的连通图,对于一个无根图,如果其中一个节点不是叶子节点,那么它一定是个关节点,即如果去掉这个点,各个节点便不再联通

很明显,k值取决于有最多联通边的节点,而且其不能是根节点,因此,k的最小值等于有最多联通边的节点边数-1,而根节点只需要选择不是最多联通边的节点的最小值

尾声

既然提到智乃了,那怎么能不放几张图呢?