牛客小白月赛112——D智乃的“K”叉树

题目

智乃的“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;
}
posted @ 2025-03-22 21:50  PZnwbh  阅读(17)  评论(0)    收藏  举报