牛客小白月赛112——D智乃的“K”叉树
题目
题解
首先我们可以求出每个点的度,当你选作某个点i作为根的时候,你会发现除了这个点其他点的度数都-1,然后最大的度是几就是几叉树。我们可以找出最大的度,如果所有点度数都一样,我们要选取编号最小,即为1的点作为根节点,显然度数是几就是几叉树。如果我们从小到大枚举,找到一个不等于最大度的节点,那么我们选择他时,最大度会-1,就实现了最小值k。
参考代码
#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
const int N = 1e5 + 10;
int deg[N];
void solve(){
int n;
cin >> n;
for(int i = 0, u, v; i < n - 1; i ++){
cin >> u >> v;
deg[u] ++, deg[v] ++;
}
int maxd = 1;
for(int i = 1; i <= n; i ++) maxd = max(maxd, deg[i]);
int root = -1;
for(int i = 1; i <= n; i ++){
if(deg[i] != maxd){
root = i;
break;
}
}
if(root == -1) cout << maxd << " " << 1 << endl;
else cout << maxd - 1 << " " << root << endl;
}
int main(){
int _ = 1;
// cin >> _;
while(_ --){
solve();
}
return 0;
}

浙公网安备 33010602011771号