华为机试—最大最小路

华为杭州研究所面试记 2010.7.3,杭州,阴天,温度大于等于36℃。早上7:30,被一串清脆的铃声叫醒,自己还沉浸在巴西和荷兰的对决当中……一个翻身,以施奈德的进球速度洗刷完毕,7:45分左右出门。    外面不是一般的热。当8:15分左右,踏上B支6上后,陡然发现白色上衣变成透明得啦,这是哪跟哪呀。没有办法,就不坐了,终于在8:35左右下车。好在老天有眼,没有太阳,不然刚干的衣服,应该就像被洗了一样。    四周张望后,遂想,这伟大的华为公司在哪呀,怎么两边都是马路,我靠哦!更背的是,居然只有我一个人下车,杯具啦,这回,马 阅读详情

题目

对于给定的无向无根树,第 i 个节点上有一个权值 wi​ 。我们定义一条简单路径是好的,当且仅当:路径上的点的点权最小值小于等于 a ,路径上的点的点权最大值大于等于 b 。
保证给定的 a<b,你需要计算有多少条简单路径是好的。

示例

输入:

5 2 3
5 4 3 3 1
1 2
1 3
3 4
3 5

第一行输入三个整数 n,a,b(1≤n≤5×10^{5},1≤a<b≤10^{9}) 代表节点数、给定的上下限。
第二行输入 n 个整数 w1​,w2​,…,wn​(1≤wi​≤10^{9}) 代表每个节点的权值。
此后 n−1 行,每行输入两个整数 u,v(1≤u,v≤n,u\neqv) 代表一条无向边连接树上 u 和 v 两个节点。

输出:4

说明:对于这个样例,如下图所示。路径 2→1→3→5 是好的,因为路径点权最小值 1≦a 且点权最大值 5≧b。

除此之外,以下路径也是好的:
∙1→3→5;
∙3→5;
∙4→3→5。

分析

并查集+容斥原理

算法思路

统计总路径数:
根据组合数学得到所有可能的简单路径数。n 个节点的树中总路径数(包含单节点路径)可由组合公式计算:\frac{n(n+1)}{2}

分情况统计不好路径:

如果一条路径不好,则可能满足:

  • 全部节点权值均大于 a ——此时路径的最小值大于 a;

  • 全部节点权值均小于 b ——此时路径的最大值小于 b。

利用并查集对满足特定条件(全部节点权值大于 a,或全部节点权值小于 b,以及同时满足这两者的情况)构成的子图进行连通分量划分,进而统计每个连通分量内部所有路径数量。

利用容斥原理:
计算好路径数,确保重复扣除部分得到校正,从而求解出最终的答案。

时间复杂度:O(n)

空间复杂度:O(n)

#include <iostream>
#include <vector>
#include <utility>
using namespace std;
using ll = long long;

struct DSU {
    vector<int> parent, size;
    DSU(int n): parent(n+1), size(n+1, 1) {
        for (int i = 0; i <= n; ++i) parent[i] = i;
    }
    int find(int x) {
        return parent[x] == x ? x : parent[x] = find(parent[x]);
    }
    void unite(int a, int b) {
        a = find(a), b = find(b);
        if(a == b) return;
        if(size[a] < size[b]) swap(a, b);
        parent[b] = a;
        size[a] += size[b];
    }
};

int main(){
    int n, a, b;
    cin >> n >> a >> b;
    vector<int> w(n+1);
    for (int i = 1; i <= n; ++i) cin >> w[i];
    vector<pair<int,int>> edges(n-1);
    for (int i = 0; i < n-1; ++i)
        cin >> edges[i].first >> edges[i].second;
    // 总路径数(单节点路径也算)
    ll total = (ll)n * (n+1) / 2;
    auto countComponentPaths = [&](auto &dsu, const vector<bool> &valid) -> ll {
        vector<int> comp(n+1, 0);
        for (int i = 1; i <= n; ++i)
            if(valid[i])
                comp[dsu.find(i)]++;
        ll sum = 0;
        for (int cnt : comp)
            if(cnt) sum += (ll)cnt * (cnt+1) / 2;
        return sum;
    };
    // DSU1:构造仅包含权值 > a 的子图
    DSU dsu1(n);
    vector<bool> valid1(n+1, false);
    for (int i = 1; i <= n; ++i)
        valid1[i] = (w[i] > a);
    for (auto &e : edges) {
        if(valid1[e.first] && valid1[e.second])
            dsu1.unite(e.first, e.second);
    }
    // DSU2:构造仅包含权值 < b 的子图
    DSU dsu2(n);
    vector<bool> valid2(n+1, false);
    for (int i = 1; i <= n; ++i)
        valid2[i] = (w[i] < b);
    for (auto &e : edges) {
        if(valid2[e.first] && valid2[e.second])
            dsu2.unite(e.first, e.second);
    }
    // DSU3:构造仅包含 a < 权值 < b 的子图
    DSU dsu3(n);
    vector<bool> valid3(n+1, false);
    for (int i = 1; i <= n; ++i)
        valid3[i] = (w[i] > a && w[i] < b);
    for (auto &e : edges) {
        if(valid3[e.first] && valid3[e.second])
            dsu3.unite(e.first, e.second);
    }
    ll cnt1 = countComponentPaths(dsu1, valid1);  // 所有节点均 > a 的路径
    ll cnt2 = countComponentPaths(dsu2, valid2);  // 所有节点均 < b 的路径
    ll cnt3 = countComponentPaths(dsu3, valid3);  // 同时均在 (a,b) 内 的路径
    // 由于好路径要求最小值<= a 且最大值>= b,因此
    // 不好路径:所有节点均 > a 或所有节点均 < b
    // 但区间在 (a, b) 的部分被重复扣除,需加回来
    ll ans = total - cnt1 - cnt2 + cnt3;
    cout << ans << "\n";
    return 0;
}
微信小程序图片保存失败:华为鸿蒙系统兼容性深度解析与解决方案 在移动应用开发中,文件系统操作与权限管理是核心技术点,尤其在跨平台场景下,不同操作系统对存储访问的差异化策略直接影响功能实现。其原理涉及应用沙箱、作用域存储及系统媒体库交互机制。理解这些机制对于保障应用稳定性和用户体验至关重要,特别是在处理用户生成内容保存等高频场景时。本文聚焦于微信小程序生态中常见的图片保存功能,针对华为鸿蒙系统下因权限模型严格、基础库兼容间隙及用户交互断层导致的保存失败问题,提供了从标准化流程到降级方案的系统性解决思路,并结合真机调试与监控反馈,帮助开发者构建更健壮的应用。 阅读详情

相关推荐

eNSP实战:从零构建直连路由网络

本文详细介绍了如何使用华为eNSP模拟器从零构建直连路由网络,包括eNSP安装、基础拓扑创建、路由器接口配置及路由表查看等关键步骤。通过实战演示直连路由的配置与验证,帮助网络初学者掌握基础网络设备操作技能,为后续学习动态路由协议打下坚实基础。

weixin_29281915的博客 448

多校冲刺NOIP模拟27 - 超级加倍——重构树

中文名超级加倍,英文名慈善,题目却和标题毫无关联,BS出题人真是太有创意了

偶耶的博客 530

跨越协议鸿沟:在eNSP中实现RIP与OSPF路由双向引入

本文详细介绍了在华为eNSP模拟器中实现RIP与OSPF路由双向引入的实践方法。通过搭建实验环境、配置路由协议及双向引入实战,解决企业网络中不同路由协议互通的问题,提升网络整合效率。重点讲解了路由引入的核心命令、cost值设置及常见问题排查技巧。

weixin_33738555的博客 586

动态规划【一】到达目标的最大/最小路径

马上面临秋招,笔者也刷过不少题了,但是动态规划一直是笔者心中的痛点,大厂的笔试中动态规划已成标配,为了圆大厂梦,笔者决定沉下心,认真研究一下动态规划问题,近日看到leetcode一位大佬将动态规划问题划分为五类,私以为很受用,加上一些个人见解,将其写成博客,如有什么错误还请各位看官指正。 1、到达目标的最大/最小路径 1.1 问题描述 通常这类问题都具有如下的描述: 给定一个目标,求到达目标所需要的最大/最小代价、最大/最小和或最大/最小路径数 1.2 解题方法 以路径问题为例,通常在所有可能的路径.

qq_37163925的博客 1027

Eth-Trunk 实战配置与多VLAN通信优化指南

本文详细介绍了Eth-Trunk技术的实战配置与多VLAN通信优化方法。通过具体配置实例,讲解了如何将多条物理链路捆绑成逻辑链路以提升带宽和冗余性,特别强调了Trunk模式在多VLAN环境中的关键作用。文章还分享了负载均衡策略选择、链路故障测试等实用技巧,帮助网络工程师高效部署和优化企业级网络。

weixin_29230865的博客 422

中小型网络实战指南:基于ENSP的VLAN与DHCP高效配置

本文为中小型网络实战指南,详细讲解如何利用华为ENSP模拟器高效配置VLAN与DHCP。通过模拟典型企业网络架构,手把手指导VLAN划分、Trunk/Access端口配置、基于VLANIF的DHCP服务部署及三层路由设置,帮助网络工程师构建结构清晰、管理便捷、稳定可靠的网络环境,并提供了实用的验证与排错方法。

weixin_29290863的博客 423

树基础——详解

一个没有固定根结点的树称为无根树无根树有几种等价的形式化定义:有个结点,条边的连通无向图无向无环的连通图任意两个结点之间有且仅有一条简单路径的无向图任何边均为桥的连通图没有圈,且在任意不同两点间添加一条边之后所得图含唯一的一个圈的图在无根树的基础上,指定一个结点称为根,则形成一棵有根树有根树在很多时候仍以无向图表示,只是规定了结点之间的上下级关系,详见下文。森林(forest):每个连通分量(连通块)都是树的图。按照定义,一棵树也是森林。生成树(spanning tree)

w_w_wwwww的博客 1310

华为OD机试 - 最小传输时延Ⅱ - 矩阵、最短路径问题 (Java 2025 B卷 200分)

有M*N的节点矩阵,每个节点可以向8个方向(上下左右及四个斜线防线)转发数据包,每个节点转发时会消耗固定时延,连续两个相同时延可以减少一个时延值(即当有K个相同时延的节点连续转发时可以减少K-1个时延值),求左上角(0,0)开始转发数据包到右下角(M-1,N-1)并转发出的最短时延。,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天优快云在线答疑。第一行两个数字,M,N,接下来有M行,每行有N个数据,表示M*N的矩阵。华为OD机试 2023B卷题库疯狂收录中,刷题。

学Java,找哪吒 1305

联想与华为,通往神秘花园的交叉小径

1980年代中期,两个1944年出生的男人几乎同时创业,在那通往未知命运的泥泞小路上跋涉探索。 那时候的他们,并不知道,联想与华为的命运会在接下来的30年中出现数度的交叉。 最开始的联想,起点是相当不错的。 联想的前身是北京计算机新技术发展公司,由中科院计算机所创办,可谓是国家队。柳传志担任副总经理,其实是话事人,在技术方面,则由国内顶尖的计算机专家倪光...

weixin_33939843的博客 185

华为OD机试——使用深度优先搜索算法解决最短路径问题(C++、JavaScript、Java和Python)

通过使用深度优先搜索算法,我们成功解决了华为OD机试中的一个典型的最短路径问题。虽然旅行商问题是NP难问题,但在基站数量较少时,DFS算法可以轻松应对。本文展示了如何通过递归和回溯来枚举所有可能的路径,并找到其中的最短路径。无论是使用C++、Java、JavaScript还是Python,都能够有效地实现这一算法。这不仅展示了深度优先搜索的强大,也强调了编程语言之间在解决同一问题时的相似性和差异性。

m0_57781768的博客 703

【蓝牙PAN】精讲(9):L2CAP互操作性要求,构建可靠无线通信的桥梁

本文深入解析蓝牙PAN配置文件中L2CAP层的互操作性要求。L2CAP作为蓝牙协议栈的关键中间层,承担通道复用、数据分片重组和参数协商三大核心功能。规范明确要求必须使用面向连接通道(排除无连接通道),固定PSM值为0x000F,并详细规定了信令交互和配置参数(MTU最小1691字节、FlushTimeout设为0xFFFF等)。

byte轻骑兵的技术小窝 2万+

华为HCIP网络工程师认证—链路聚合和 ACL

本次博客咱们聊两个 HCIP 里非常实用的“工具型”技术——链路聚合和 ACL。一个是“多条路合并成一条大路”提高带宽和可靠性,一个是“门禁系统”控制哪些流量能过、哪些不能过。链路聚合有着提升带宽、增加可靠性和负载分担的作用;访问控制列表在网络连通基础上实现精细化控制。本博客将链路聚合和 ACL的知识点进行总结。

极客园地 279

Windows环境Oracle19C安装与配置全攻略

本文详细介绍了在Windows环境下安装与配置Oracle19C数据库的完整流程,包括环境准备、安装步骤、网络配置、客户端工具设置及常见问题解决方案。特别针对Windows 10和Windows Server 2016及以上版本提供了优化建议,帮助用户高效完成Oracle19C的部署与维护。

weixin_28455801的博客 487

智能家居跌跌撞撞地走在一条泥泞小路上

2014年初,谷歌以32亿美元报价收购了智能家居公司NestLabs,自此,智能家居概念开始进入媒体和公众视野并逐渐火爆。2015年被业界认为是智能家居元年,然而也有媒体称该年度为“被忽悠的一年”。进入2016年以后,智能家居产品逐渐丰富,但问题也逐渐暴露出来,比如因多方参与而导致标准难统一、因产品碎片化而导致难形成系统等。可以说,2016年的智能家居仍...

weixin_34269583的博客 137

Windows-Anaconda3+TensorFlow安装教程

测试环境:win10-64位和win7-64位 (系统必须是64位,因为TensorFlow目前只支持64位) 一、安装Anaconda3 1.下载Anaconda3 Anaconda官网链接:link 这里我们选择Windows版本,python3.6-version-64位,如下图所示。 2.下载完成之后,点击安装Anaconda3 注意:安装过程中要选择添加环境变量,如图 待安装完成...

DoctorCuiLab的博客 3086

血管分割中的直径平衡难题:从clDice到cbDice的演进与实践

本文探讨了血管分割中的直径平衡难题,详细分析了从clDice到cbDice的技术演进与实践。通过引入半径感知权重和边界对齐惩罚,cbDice在保持拓扑完整性的同时提升了几何敏感度,显著改善了细小血管的分割效果。文章还分享了在nnU-Net中实现cbDice的工程细节,包括GPU加速骨架提取和多任务损失组合策略,为医学影像分析提供了重要参考。

weixin_29170327的博客 243

华为星闪(NearLink)架构深度解析:汽车传感器应用、AT 指令与低功耗控制全方案(上)

星闪(NearLink)技术为汽车传感器通信带来革命性变革。该技术通过G/T节点架构和SLB/SLE双模设计,完美适配不同传感器的传输需求:SLB模式满足激光雷达等设备的高速低时延传输(≤20μs),SLE模式支持胎压传感器等低功耗需求(功耗比蓝牙低40%)。相比传统有线/无线方案,星闪可减少300米布线,降低车身重量5-10kg,同时支持数百个传感器并发连接。文章详细解析了各类传感器与星闪的适配方案,包括AT指令配置、低功耗策略(如定时休眠、异常触发传输)和完整软件实现,助力工程师快速部署星闪+汽车传感器

bother3000的博客 2080

椭圆曲线点加的推导公式(一)

椭圆曲线点加推导过程

qq_32100199的博客 1517

阿维塔城区NCA智驾导航辅助,复杂路口,全面胜任

不同于纯视觉感知方案,阿维塔通过34颗智驾传感器,特别是三颗激光雷达的加持,构建起4层感知防护体系,并通过AI算法的训练实现了对周围环境的360°全方位感知能力,即“我不知道你是什么,但我知道你阻挡了我”,由此极大地提升了车辆的主动安全可靠性。基于360°全方位感知能力和高性能智能驾驶计算平台的全融合感知算法,阿维塔11城区NCA智驾导航辅助实现了无保护路口通行、拥堵路段跟车启停、近距离加塞处理、主动超车换道等城区典型场景的全覆盖,且更适应中国复杂的道路交通环境、更懂中国用户的日常出行场景。

shenzhoubb2017的博客 1116

从标记基因到功能分析:手把手教你人工注释单细胞亚群的完整流程

本文详细介绍了人工注释单细胞亚群的完整流程,从标记基因筛选到功能分析验证,特别针对肿瘤微环境、发育轨迹等复杂场景提供解决方案。通过差异表达分析、多维数据整合和实验验证,帮助研究者准确识别细胞类型,提升单细胞转录组研究的生物学解读深度。

jenkins8butler的博客 244

华为OD机试_2025 B卷_模拟消息队列(Python,100分)(附详细解题思路)

时间排序:确保事件处理顺序正确消费者管理:集合操作高效维护状态优先级实现:利用消费者ID自然排序边界处理:正确处理空消费者情况。

测试工程师的成长之路 1120

你值得拥有!如何做到操作系统和并发同步结合?Java校招面试指南

前言 从3月份开始,打算找工作,一个偶然的机会,拉勾上一个蚂蚁金服的师兄找到我,说要内推,在此感谢姚师兄,然后就开始了蚂蚁金服的面试之旅。把简历发过去之后,就收到了邮件通知,10个工作日联系我,请耐心等待。 没过2天就接到一个杭州的座机,说要约我进行电话面试,效率还是挺高,然后当天晚上就进行了一面。下班后,吃了饭,专门找了一条人比较少的小路,到了7点,电话准时打过来了。 HUAWEI-Java一面-1H 闲聊偏多,问的技术性问题比较基础 简单说说面向对象的特征以及六大原则 谈谈final、final

m0_56051002的博客 507

嵌入式系统开发笔记112:通过有人云测试MQTT

项目中使用到“有人”公司的WH-LTE-7S0模块,本文讲解通过有人云进行MQTT测试的方法。

snmplink的博客 999

企业网络运维实战:交换机端口安全与DHCP Snooping配置详解

在企业网络运维中,二层交换机的安全配置是保障网络稳定与安全的基础。其核心原理在于通过控制数据链路层与网络层的访问,防止未经授权的设备接入和恶意攻击。端口安全(Port-Security)通过限制接口学习MAC地址的数量,从源头上阻止私接设备;而DHCP Snooping则通过监听并过滤DHCP报文,构建信任端口与非信任端口模型,有效防御私接路由器冒充DHCP服务器导致的IP地址冲突和网络异常。这些技术的工程价值在于,它们通常由交换机硬件ASIC芯片实现,对设备性能影响微乎其微,却能极大提升网络的主动防御能力

weixin_30595035的博客 432

Cadence OrCAD Capture CIS元器件管理时ERROR(ORCIS-6454): Temporary part number tracking is turned on报错的解决方法

使用Part manager对工程的元器件进行批量管理时,出现如下图所示的ERROR(ORCIS-6454): Temporary part number tracking is turned on报错其解决方法如下。

fydar的博客 3506

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

北京越野豪华新品牌“泰钽”发布,首款车型泰钽700预售价29.98万元起

北京越野的智能辅助驾驶并非拿来主义,而是携手全球智能辅助驾驶领域的领跑者华为乾崑智驾,双方深度共创——将百万公里越野实测数据、68年深厚技术底蕴与华为领先的算法深度融合,为泰钽700量身打造出真正的“智能越野大脑”。全球豪华越野看中国,中国豪华越野看北京。愿每一位时代奋斗者,都能开着泰钽700,去更远的地方,见更阔的天地,一身“泰”然,一路“钽”途。作为智能越野3.0时代的首款车型,泰钽700以27项同级唯一、同级独特、同级领先的产品实力,在审美、智能、舒适、安全、越野五大方面重新定义豪华越野。

csdnsqst0046的博客 218

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: 华为机试—火车进站
下一篇: LeetCode hot 100—最长公共子序列
rigidwill666
博客等级 码龄7年 508粉丝 108原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rigidwill666

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值