当前位置: 首页 > article >正文

【算法思考记录】力扣2477. 到达首都的最少油耗【Java,深度优先搜索】

原题链接

到达首都的最少油耗:一种优雅的解决方案

题目解析

这个算法题目描述了一个有趣的场景:一棵由城市和道路组成的树形结构,其中每个节点代表一个城市,边代表道路。所有城市的代表需要前往编号为0的城市——首都参加会议。任务是计算代表们到达首都所需的最小油耗,假设每座城市只有一辆车,且每辆车的座位数相同。

输入说明

  • roads: 一个二维数组,表示城市间的双向道路。
  • seats: 整数,表示每辆车的座位数。

输出说明

  • 返回一个整数,表示最小的油耗总量。

题解思路

这个问题可以转化为遍历树的问题。对于树中的每一个非首都节点,计算它的子树中有多少个节点,并将这个数除以座位数向上取整,得到的就是从该节点到首都所需的最少油耗。最后,将所有这些油耗相加即可。

Java 代码实现

class Solution {
    private long ans;

    private int dfs(int node, int fa, List<Integer>[] graph, int seats) {
        int size = 1;
        for (int chi : graph[node]) {
            if (chi == fa) {continue;}
            size += dfs(chi, node, graph, seats);
        }
        if (node != 0) {
            ans += (size - 1) / seats + 1;
        }
        return size;
    }
    public long minimumFuelCost(int[][] roads, int seats) {
        int n = roads.length + 1;
        List<Integer>[] graph = new ArrayList[n];
        Arrays.setAll(graph, e -> new ArrayList<>());
        for (int[] e : roads) {
            int x = e[0], y = e[1];
            graph[x].add(y);
            graph[y].add(x);
        }
        dfs(0, 0, graph, seats);
        return ans;
    }
}

解释

  1. 创建一个图 g,存储每个城市的相邻城市。
  2. 使用深度优先搜索(DFS)遍历树,计算每个子树的大小。
  3. 对于每个子树,将其大小除以座位数并向上取整,得到的结果加到总油耗 ans
  4. 返回总油耗。

结论

这个题解提供了一个高效且清晰的方法来解决“到达首都的最少油耗”问题,展示了如何利用树的结构和深度优先搜索算法来优雅地解决实际问题。



http://www.kler.cn/a/158702.html

相关文章:

  • [Qt platform plugin问题] Could not load the Qt platform plugin “xcb“
  • 前端基础(四十一):实时获取麦克风音量
  • 在 Spark RDD 中,sortBy 和 top 算子的各自适用场景
  • 【linux】如何扩展磁盘容量(VMware虚拟机)-转载
  • MYSQL_深入理解自连接_图书借阅情况(2/2)
  • Sql进阶:字段中包含CSV,如何通过Sql解析CSV成多行多列?
  • LoadBalancer将服务暴露到外部实现负载均衡metallb-layer2模式配置介绍
  • 手机大厂必备测试技能有哪些?CTS 兼容测试首当其冲
  • Jinja2使用Layui报 “d is not defined“
  • ASEM工控机维修工业电脑控制器维修PB3400
  • 【Vulnhub 靶场】【HackathonCTF: 2】【简单】【20210620】
  • 龙芯loongarch64服务器编译安装maturin
  • 外包干了8个月,技术退步明显.......
  • 什么是上采样和下采样?
  • Java8实战-总结50
  • rcssci包横空出世,限制性立方样条全自动切点靓图
  • 【计算机系统基石与Linux进程管理深度解析】
  • 【无标题】什么是UL9540测试,UL9540:2023版本增加哪些测试项目
  • UE4 UE5 使用SVN控制
  • C#:文件和文件夹的相关操作详解
  • CTF特训日记day(4-6)
  • 代码随想录算法训练营第24天|● 理论基础 ● 77. 组合
  • 代码随想录算法训练营 ---第五十五天
  • unity 2d入门飞翔小鸟按钮点击功能且场景切换(二)
  • QT中的 容器(container)-大全
  • 基于SpringBoot的校园互助网站