网络延时 第四次CCF-CSP计算机软件能力认证

就是求树的直径:

思路:函数代表当前根节点的最长距离 然后遍历保存当前树的所有孩子的最长距离 和次长距离 如果是叶子节点就返回0

在每次获得每个节点的次长距离和最长距离就更新全局直径 最后获得最长距离

Ac代码:

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 20005;          // n + m ≤ 2 × 10⁴

struct Node {
    vector<int> child;           // 下挂节点
    int parent = 0;              // 可选:上级交换机
} tree[MAXN];

int n, m;
int diameter_len = 0;            // 全局最长路径(边数)

/*
 * dfs(u) 返回:以 u 为根向"最深叶子"走下去的最大深度(边数)
 * 同时在回溯阶段用两条最大的儿子深度 candidate1、candidate2
 * 来更新经过 u 的最长路径,从而维护全局直径 diameter_len
 */
int dfs(int u)
{
    int first = 0, second = 0;   // 当前结点两条最大下行深度

    for (int v : tree[u].child)
    {
        int d = dfs(v) + 1;      // +1 把边 u→v 计入深度
        if (d > first) {
            second = first;
            first = d;
        }
        else if (d > second) {
            second = d;
        }
    }

    diameter_len = max(diameter_len, first + second);  // 经过 u 的最长"弯"路径
    return first;                                      // 向上传递最大深度
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    if (!(cin >> n >> m)) return 0;


    for (int i = 2; i <= n; ++i) {
        int p; cin >> p;
        tree[i].parent = p;
        tree[p].child.push_back(i);
    }

    for (int i = 1; i <= m; ++i) {
        int p; cin >> p;           // 父交换机编号
        int id = n + i;
        tree[id].parent = p;
        tree[p].child.push_back(id);
    }

    dfs(1);                        // 根为 1
    cout << diameter_len << '\n';  // 最长消息转发路径(边数)

    return 0;
}
相关推荐
乐观勇敢坚强的老彭2 分钟前
信奥C++一维数组笔记
开发语言·c++·笔记
码上有光4 分钟前
异常和智能指针
java·大数据·c++·servlet·异常·智能指针
变量未定义~7 分钟前
最小生成树1(Prim模板)、最小生成树2(kruskal模板)、最近公共祖先(模板)
算法
这就是佬们吗10 分钟前
Python入门⑤-异常处理、文件操作与实战项目
开发语言·数据库·python·算法·pycharm
王维同学16 分钟前
[原创][Windows C++]Explorer Shell 扩展、图标覆盖与 COM 服务器定位
c++·windows·注册表
LONGZETECH18 分钟前
新能源汽车充电设备装配与调试仿真教学软件 技术架构与核心实现解析
大数据·算法·3d·unity·架构·汽车
code_pgf20 分钟前
C++ 工程架构设计规范
c++·机器人
自学小白菜20 分钟前
关于提升机器学习算法做预测回归任务精度的方法分享
算法·机器学习·回归·提升精度
C++ 老炮儿的技术栈26 分钟前
基于MFC+原生GDI手动自绘仪表盘控件
c语言·c++·visual studio·控件·工业控制·gdi·自绘
学废了wuwu28 分钟前
从入门到实战:深入浅出模型压缩三大核心——剪枝、彩票假设与知识蒸馏
人工智能·算法·剪枝