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

LeetCode 每日一题 Day 4

2477. 到达首都的最少油耗

给你一棵 n 个节点的树(一个无向、连通、无环图),每个节点表示一个城市,编号从 0 到 n - 1 ,且恰好有 n - 1 条路。0 是首都。给你一个二维整数数组 roads ,其中 roads[i] = [ai, bi] ,表示城市 ai 和 bi 之间有一条 双向路 。

每个城市里有一个代表,他们都要去首都参加一个会议。

每座城市里有一辆车。给你一个整数 seats 表示每辆车里面座位的数目。

城市里的代表可以选择乘坐所在城市的车,或者乘坐其他城市的车。相邻城市之间一辆车的油耗是一升汽油。

请你返回到达首都最少需要多少升汽油。

示例 1:
在这里插入图片描述

输入:roads = [[0,1],[0,2],[0,3]], seats = 5
输出:3
解释:

  • 代表 1 直接到达首都,消耗 1 升汽油。
  • 代表 2 直接到达首都,消耗 1 升汽油。
  • 代表 3 直接到达首都,消耗 1 升汽油。
    最少消耗 3 升汽油。
    示例 2:

在这里插入图片描述

输入:roads = [[3,1],[3,2],[1,0],[0,4],[0,5],[4,6]], seats = 2
输出:7
解释:

  • 代表 2 到达城市 3 ,消耗 1 升汽油。
  • 代表 2 和代表 3 一起到达城市 1 ,消耗 1 升汽油。
  • 代表 2 和代表 3 一起到达首都,消耗 1 升汽油。
  • 代表 1 直接到达首都,消耗 1 升汽油。
  • 代表 5 直接到达首都,消耗 1 升汽油。
  • 代表 6 到达城市 4 ,消耗 1 升汽油。
  • 代表 4 和代表 6 一起到达首都,消耗 1 升汽油。
    最少消耗 7 升汽油。
    示例 3:

在这里插入图片描述

输入:roads = [], seats = 1
输出:0
解释:没有代表需要从别的城市到达首都。

提示:

1 <= n <= 105
roads.length == n - 1
roads[i].length == 2
0 <= ai, bi < n
ai != bi
roads 表示一棵合法的树。
1 <= seats <= 105

代码实现(贪心+DFS):

class Solution {
public:long long minimumFuelCost(vector<vector<int>> &roads, int seats) {vector<vector<int>> adjacencyList(roads.size() + 1);// 构建邻接表for (auto &edge : roads) {int city1 = edge[0], city2 = edge[1];adjacencyList[city1].push_back(city2);adjacencyList[city2].push_back(city1);}long long totalFuel = 0;function<int(int, int)> dfs = [&](int currentCity, int parentCity) -> int {int subtreeSize = 1;
//lambda表达式// 遍历邻居节点for (int neighbor : adjacencyList[currentCity]) {if (neighbor != parentCity) {subtreeSize += dfs(neighbor, currentCity);}}// 如果当前城市不是根节点,计算需要的油耗if (currentCity != 0) {totalFuel += (subtreeSize - 1) / seats + 1; }return subtreeSize;};dfs(0, -1); // 从根节点开始深度优先搜索return totalFuel;}
};

在这里插入图片描述
参考了灵神的题解

http://www.lryc.cn/news/253890.html

相关文章:

  • 服务器数据恢复—重装系统导致XFS文件系统分区丢失的数据恢复案例
  • Scala 从入门到精通
  • 华为OD机试 - 九宫格按键输入 - 逻辑分析(Java 2023 B卷 200分)
  • leetcode:225. 用队列实现栈
  • Centos7安装GItLab(在线版)
  • Linux入门笔记
  • nvm for windows使用与node/npm/yarn的配置
  • 打工人副业变现秘籍,某多/某手变现底层引擎-StableDiffusionWebUI界面基本布局和操作
  • 01、pytest:帮助你编写更好的程序
  • C语言--每日选择题--Day37
  • Android 12 及以上授权精确位置和模糊位置
  • scp 指令详细介绍
  • 构建第一个事件驱动型 Serverless 应用
  • 特征与特征图的区别
  • Linux学习笔记之七(shell脚本的基本语法)
  • PySpark开发环境搭建常见问题及解决
  • supervisor管理启动重启,Java,Go程序Demo
  • HarmonyOs 4 (三) ArkTS语言
  • PostGIS学习教程九:空间连接
  • C++ day56 两个字符串的删除操作 编辑距离
  • Android studio中如何生成jar包?
  • 【2】基于多设计模式下的同步异步日志系统-设计模式
  • 第十五届蓝桥杯模拟赛B组(第二期)C++
  • 企业ERP软件定制开发要注意|app小程序搭建
  • 系统架构设计-权限模块的设计
  • IDEA切换Python虚拟环境
  • 《opencv实用探索·十一》opencv之Prewitt算子边缘检测,Roberts算子边缘检测和Sobel算子边缘检测
  • prime靶机打靶记录
  • 树莓派,linux换清华源
  • 公有云迁移研究——AWS DMS