笔试算法模拟题精解之“Codancer的旅行”

简介: 根据样例数据 从1到2的花费为1,从1到3的花费为2,从2到3的花费为1,花费都小于3,因此总共有三种方案。

【在线编程产品介绍】

阿里云开发者社区在线编程:

免费刷题大神器,助你拿到好offer

周赛月赛不停歇,做题还能领奖品

大赛笔试全真题,常做常新有惊喜

点击链接开始产品体验:https://developer.aliyun.com/coding

本文为大家介绍的是“123.Codancer的旅行”的解法探究。先来看一下题目内容:

题目详情

题目等级:困难
知识点:二分查找/并查集/贪心
查看题目:123.Codancer的旅行 期末考试终于结束啦,Codancer开始了他的旅行。

现在整个地图上由n个城市,这些城市之间有n-1条道路相连,每条道路都有一个距离,并且保证整个图是连通的,即这个地图可以看作是一棵树。

现在假设Codancer要从城市A到城市B,那么他的路费就是从A-B的路径上边权最大的边的权值wmaxx元。

现在Codancer有k元,他想知道他能选择那些(A,B)并且A<B使得codancer能够到达。

第一行输入两个正整数n和k,代表城市的个数和Codancer现有的资金数目,接下来n-1行每行三个数u,v,w,代表城市u和城市v之间有一条长度为w的道路。(1<=n<=100000,1<=k<=1000,1<=u,v<=n,1<=w<=1000)

输出codancer可选择的方案数。

示例1
输入:
3
3
[[1,2,1],[2,3,1]]
输出:
3

注意
Codancer可以选择从:
1->2
1->3
2->3

解题方法一

根据样例数据 从1到2的花费为1,从1到3的花费为2,从2到3的花费为1,花费都小于3,因此总共有三种方案。
image.png
首先按照边权将这些边从小到大排序,使用并查集记录当前连通块内的最大的边权。

当u和v连接起来的时候,假设此时的联通块大小为cnt,则答案应该加上cnt*(cnt-1)/2,同时应该减去之前u和v单独为连通块的方案数。

令ans[i]为最大边权为第i条时构成的连通块的方案数,那么对于k,二分查找最大的小于等于k的下标id,最终答案就是ans[id]。
时间复杂度为:O(nlog(n))

解题方法二

虽然题中给出的是一个树形结构,但是解题时和树的关系不是很大。
题中指出从城市A到B的路费是从A-B的路径上边权最大的边的权值wmaxx元。可以理解成对于权值大于现有资金数目k的边,codancer不能通过,其他边可以任意通过。所以原始的树形结构被不能通过的边分割成了多个子区域。每个子区域没的任意两个城市是可以互相到达的。每个子区域内方案数为C(n, 2),n为子区域内城市个数。
对于子区域的计算可以考虑从底向上合并的形式。创建一个1*n的数组a,数组的每个位置代表一个城市,每个位置的内容代表这个城市所在的子区域。初始化时a[i] = i。遍历时,选择可以通过的边,把两个边对应的城市所属子区域合并(修改成同样的数字)即可。
时间复杂度O(2n) 第一遍判断每个城市属于哪个子区域。第二遍计算每个子区域城市个数,并用C(n, 2)求和。
空间复杂度O(n)

看完之后是不是有了答题思路了呢,快来练练手吧:123.Codancer的旅行

86ec585233a947ccb2959493bdfdabdf.png

相关文章
|
4月前
|
算法
电子好书发您分享《超全算法笔试 模拟题精解合集》
电子好书发您分享《超全算法笔试 模拟题精解合集》
26 3
|
4月前
|
算法
电子好书发您分享《超全算法笔试 模拟题精解合集》
电子好书发您分享《超全算法笔试 模拟题精解合集》
26 2
|
3月前
|
编解码 算法 前端开发
往年 | 大疆雷达算法校招笔试题目解析
往年 | 大疆雷达算法校招笔试题目解析
45 1
|
6月前
|
算法
压缩算法 【腾讯2020校园招聘-后台&综合-第一次笔试 】
压缩算法 【腾讯2020校园招聘-后台&综合-第一次笔试 】
30 0
|
11月前
|
搜索推荐
7大排序算法-- 堆排 快速排序 --精解(下)
7大排序算法-- 堆排 快速排序 --精解(下)
54 0
|
11月前
|
搜索推荐
7大排序算法-- 堆排 快速排序 --精解(上)
7大排序算法-- 堆排 快速排序 --精解
32 0
|
11月前
|
搜索推荐 算法
7大排序算法-- 直接插入,希尔,冒泡,选择 --精解(下)
7大排序算法-- 直接插入,希尔,冒泡,选择 --精解(下)
79 0
|
11月前
|
存储 搜索推荐
7大排序算法-- 直接插入,希尔,冒泡,选择 --精解(上)
7大排序算法-- 直接插入,希尔,冒泡,选择 --精解
60 0
|
11月前
|
算法 Serverless 测试技术
骚戴独家笔试---算法篇5
骚戴独家笔试---算法篇5
37 0
|
11天前
|
机器学习/深度学习 人工智能 算法
基于DCT和扩频的音频水印嵌入提取算法matlab仿真
本文介绍了结合DCT和扩频技术的音频水印算法,用于在不降低音质的情况下嵌入版权信息。在matlab2022a中实现,算法利用DCT进行频域处理,通过扩频增强水印的隐蔽性和抗攻击性。核心程序展示了水印的嵌入与提取过程,包括DCT变换、水印扩频及反变换步骤。该方法有效且专业,未来研究将侧重于提高实用性和安全性。