#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,而根节点只需要选择不是最多联通边的节点的最小值
尾声
既然提到智乃了,那怎么能不放几张图呢?

京公网安备 11010502036488号