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

Leetcode 3544. Subtree Inversion Sum

  • Leetcode 3544. Subtree Inversion Sum
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3544. Subtree Inversion Sum

1. 解题思路

这一题我的思路上就是一个动态规划的思路,因为原则上我们只需要遍历一下所有的状态即可,但是这样显然时间复杂度过高,因此我们采用一个动态规划的思路用空间换时间,即可完成上述题目的解答。

具体到实现上也是比较简单,首先就是利用边的内容获取一下整的这个树的结构。

然后我们就是一个遍历,遍历的时候需要记录一下每一个节点当前的正负相位,是否可以相位反转以及如果不可以反转的话,还需要多少深度才能够进行相位反转。

2. 代码实现

给出python代码实现如下:

class Solution:def subtreeInversionSum(self, edges: List[List[int]], nums: List[int], k: int) -> int:def get_graph(edges):graph = defaultdict(list)for u, v in edges:graph[u].append(v)graph[v].append(u)new_graph = defaultdict(list)def _dfs(u, p):for v in graph[u]:if v == p:continuenew_graph[u].append(v)_dfs(v, u)return _dfs(0, -1)return new_graphgraph = get_graph(edges)@lru_cache(None)def dfs(u, flag, d):if d == 0 or d >= k:ans = flag * nums[u]for v in graph[u]:ans += dfs(v, flag, 0)rev = - (flag * nums[u])for v in graph[u]:rev += dfs(v, -flag, 1)return max(ans, rev)else:ans = flag * nums[u]for v in graph[u]:ans += dfs(v, flag, d+1)return ansreturn dfs(0, 1, 0)

提交代码评测得到:耗时6642ms,占用内存774.9MB。

相关文章:

  • 【Nova UI】十五、打造组件库之滚动条组件(上):滚动条组件的起步与进阶
  • Electron-Vue3、Electron-React、Electron-Angular打造舆情监控系统项目
  • Java SE(12)——异常(Exception)
  • InternVL3: 利用AI处理文本、图像、视频、OCR和数据分析
  • C++11异步编程 --- async
  • SQL易混点:你知道ON 和 WHERE 的区别吗
  • 软考 系统架构设计师系列知识点之杂项集萃(58)
  • JIT+Opcache如何配置才能达到性能最优
  • Spring Boot 整合 Redis 实战
  • S7-1200 PLC与梅特勒-托利多IND360称重仪表通信
  • python酒店健身俱乐部管理系统
  • 遨游5G-A防爆手机:赋能工业通信更快、更安全
  • 【Ansible】基于windows主机,采用NTLM+HTTPS 认证部署
  • Flutter小白入门指南
  • USB3.0拓展坞制作学习
  • 芯片:金线的作用
  • RDD案例数据清洗
  • Maven 动态插件配置:Profile的灵活集成实践
  • PowerShell 实现 conda 懒加载
  • 新建一个reactnative 0.72.0的项目
  • 著名连环画家庞邦本逝世
  • 三大股份制银行入局AIC,一级市场再迎“活水”
  • 不到1小时就能速发证件?央媒曝光健康证办理乱象
  • 印度证实印巴已同意停火
  • 警方通报男子地铁上拍视频致乘客恐慌受伤:列车运行一度延误,已行拘
  • 庆祝上海总工会成立100周年暨市模范集体劳动模范和先进工作者表彰大会举行,陈吉宁寄予这些期待