网络延时 第四次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;
}
相关推荐
夏乌_Wx1 分钟前
剑指offer | 2.4数据结构相关题目
数据结构·c++·算法·剑指offer·c/c++
米啦啦.3 分钟前
C+类的友元与静态成员函数,类模板
c++·友元·类模板
超绝振刀怪8 分钟前
【C++可变模板参数】
开发语言·c++·可变模板参数
AI成长日志1 小时前
【笔面试算法学习专栏】哈希表基础:两数之和与字母异位词分组
学习·算法·面试
minji...1 小时前
Linux 线程同步与互斥(二) 线程同步,条件变量,pthread_cond_init/wait/signal/broadcast
linux·运维·开发语言·jvm·数据结构·c++
梓䈑1 小时前
高性能 C++ 日志实战:spdlog 核心架构解析与最佳实践指南
c++·架构
abant21 小时前
leetcode 239 单调队列 需要一些记忆
算法·leetcode·职场和发展
漫霂1 小时前
二叉树的统一迭代遍历
java·算法
炽烈小老头1 小时前
【每天学习一点算法 2026/04/08】阶乘后的零
学习·算法
Mr_Xuhhh1 小时前
算法刷题笔记:从滑动窗口到哈夫曼编码,我的算法进阶之路
开发语言·算法