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

力扣每日一题:2646. 最小化旅行的价格总和(2023-12-06)

力扣每日一题
题目:2646. 最小化旅行的价格总和
2023-12-06.png
日期:2023-12-06
用时:30 m 14 s
时间:8ms
内存:42.98MB
思路:先统计旅行中每个节点路过的次数(dfs方法),再计算减半后的价格之和的最小值(dp方法),最后比较下减半和未减半的价格。dp方法中,对于相邻的父子节点有两种情况:

  • 如果父节点价格不变,那么子节点的价格取减半和不变两种情况的最小值
  • 如果父节点价格减半,那么子节点的价格只能不变

代码:每条路上通过的城市数量实际就是图中每个节点的子节点数量。

class Solution {
    public int minimumTotalPrice(int n, int[][] edges, int[] price, int[][] trips) {
      list = new ArrayList[n];
      for(int i=0;i<n;i++){
        list[i] = new ArrayList<>();
      }
      for(int[] edge:edges){
        list[edge[0]].add(edge[1]);
        list[edge[1]].add(edge[0]);
      }
      cnt = new int[n];
      for(int[] trip:trips){
        end = trip[1];
        dfs(trip[0],-1);
      }
      int[] res = dp(0,-1,price);
      return Math.min(res[0],res[1]);
    }
    List<Integer>[] list;
    int end;
    int[] cnt;
    boolean dfs(int x, int fa) {
        if (x == end) {
            cnt[x]++;
            return true;
        }
        for (int y : list[x]) {
            if (y != fa && dfs(y, x)) {
                cnt[x]++;
                return true;
            }
        }
        return false;
    }
    int[] dp(int index,int target,int[] price){
      int prices = price[index]*cnt[index];
      int halfPrices = prices/2;
      for(int num:list[index]){
        if(num!=target){
          int[] res = dp(num,index,price);
          prices += Math.min(res[0],res[1]);
          halfPrices += res[0];
        }
      }
      return new int[]{prices,halfPrices};
    }
}

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

相关文章:

  • 用MVVM设计模式提升WPF开发体验:分层架构与绑定实例解析
  • 【Java语言】String类
  • Vue.js 项目创建流程
  • PNG图片批量压缩exe工具+功能纯净+不改变原始尺寸
  • 代码修改材质参数
  • [CKS] K8S NetworkPolicy Set Up
  • HarmonyOS4.0从零开始的开发教程05 应用程序入口—UIAbility的使用
  • C++EasyX之井字棋
  • 【华为数据之道学习笔记】3-1 基于数据特性的分类管理框架
  • 大数据可视化项目——基于Python豆瓣电影数据可视化分析系统的设计与实现
  • AIGC: 关于ChatGPT中基于Whisper模型实现音频转文本
  • Java利用UDP实现简单群聊
  • 做题笔记:SQL Sever 方式做牛客SQL的题目--VQ35
  • Java开源工具库Guava使用指南详解
  • sqlite3.44.2的编译
  • centos7安装rabbitMQ
  • Jenkins UI 自动化持续化集成测试
  • linux缓冲区(buff/cache)内存占用过高解决办法
  • 从零开发短视频电商 Jmeter压测示例模板详解(无认证场景)
  • 2023年山东省职业院校技能大赛信息安全管理与评估第一阶段样题
  • ffmpeg与opencv-python处理视频
  • 聚观早报 |东方甄选将上架文旅产品;IBM首台模块化量子计算机
  • 准确!!!在 CentOS 8 上配置 PostgreSQL 14 的主从复制
  • 2024年江苏省职业院校技能大赛信息安全管理与评估 第三阶段学生组(样卷)
  • Qt进程和线程
  • B 站基于 StarRocks 构建大数据元仓