小G有一个大树-树的重心

小G有一个大树

https://ac.nowcoder.com/acm/problem/15033

#include<bits/stdc++.h>
using namespace std;

typedef long long LL;
const LL INF = 0x3f3f3f3f;
const int maxn = 1005;
vector<int> G[maxn];
int n;
int treeVerN[maxn]; // 以 i 为根的树,节点总数
int center, childmax; // 重心,最大子树地节点个数
void dfs(int cur, int par)//current , parent
{
    treeVerN[cur] = 1; // 这棵树节点数目 包含根自身
    int childN = G[cur].size(), curCmax = -1;
    for(int i = 0;i < childN; ++i)
    {
        int childSeq = G[cur][i];
        if( childSeq != par){
            dfs(childSeq, cur);
            curCmax = max(curCmax, treeVerN[childSeq]);
            treeVerN[cur] += treeVerN[childSeq];
        }

    }

    curCmax = max(curCmax, n - treeVerN[cur]);
    if(curCmax < childmax)
    {
        center = cur;
        childmax = curCmax;
    }else if(curCmax == childmax)
    {
        center = min(center, cur);
    }

}
int main()
{
    ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);

    while(cin >> n)
    {
        for(int i = 1;i <= n;++i)
            G[i].clear();
        center = -1, childmax = maxn;

        int u, v;
        for(int i = 1;i < n;++i)
        {
            cin >> u >> v;
            G[u].push_back(v);
            G[v].push_back(u);
        }

        dfs(1,-1);

        cout << center << " " << childmax;
    }


    return 0;
}


全部评论

相关推荐

昨天 22:54
武汉大学 Java
点赞 评论 收藏
分享
10-16 15:48
算法工程师
点赞 评论 收藏
分享
11-27 21:29
已编辑
武汉理工大学 Java
dachang盒子:学历不错,但是项目配不上你的学历,一眼外卖+点评。唯一的亮点就是LLM客服,但是你的描述是“用Dify平台实现”这句话太掉价了。Dify是一个低代码/无代码平台,你写“用Dify”,面试官会觉得你只是拖拉拽弄了个Bot,没有代码量。作为一个Java后端,你应该展示的是LangChain/Spring AI的开发能力,而不是会用一个工具。如果你感兴趣的话可以私信我或者点我主页,我可以给你提供真实的大厂项目再加你这个学历,冲击大厂肯定没问题
点赞 评论 收藏
分享
评论
10
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务