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

做网站广告的点关键词代做排名推广

做网站广告的点,关键词代做排名推广,做星座网站,定兴县住房和城乡建设局网站Leetcode 3553. Minimum Weighted Subgraph With the Required Paths II 1. 解题思路2. 代码实现 题目链接:3553. Minimum Weighted Subgraph With the Required Paths II 1. 解题思路 这一题很惭愧,并没有自力搞定,是看了大佬们的解答才有…
  • Leetcode 3553. Minimum Weighted Subgraph With the Required Paths II
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3553. Minimum Weighted Subgraph With the Required Paths II

1. 解题思路

这一题很惭愧,并没有自力搞定,是看了大佬们的解答才有了思路,然后还没有做出来,最后最核心的内容是问了deepseek搞定的,发现是一个经典算法,也算是涨姿势了……

言归正传,这一题要求包含给定的三个点的最小子树的距离,事实上我们只需要分别求出任意其中两点的距离,然后三者相加除以2即是我们的答案了。

因此,问题就变成了如何求树当中任意两点的距离。而这个,我们事实上也只需要指定树的一个根节点,那么任意两个点的距离事实上就是这两个点分别关于这个根节点的距离之和减去他们的最小公共父节点到根节点的距离的两倍即可求得。

于是乎,我们的问题就只剩下如何求一个树上任意两个点的最小公共父节点了。我最开始是通过暴力解法来的,但这样的话单次query的时间复杂度就是 O ( N ) O(N) O(N)了,最终导致了整体代码的超时,问了一下deepseek之后发现求树的最小公共父节点事实上是一个非常经典的算法,虽然我还没完全看懂,不过copy了一下deepseek给到的算法实现之后,上述题目倒是直接搞定了……

只能说,又双叒叕是被deepseek完虐的一天,唉……

2. 代码实现

给出python代码实现如下:

class LCA:def __init__(self, root, tree):self.max_level = 20  # 根据树的高度调整self.parent = defaultdict(lambda: [-1]*self.max_level)self.depth = {}self.preprocess(root, tree)def preprocess(self, root, tree):stack = [(root, -1, 0)]  # (node, parent, depth)while stack:node, par, d = stack.pop()self.depth[node] = dself.parent[node][0] = parfor k in range(1, self.max_level):if self.parent[node][k-1] != -1:self.parent[node][k] = self.parent[self.parent[node][k-1]][k-1]for child in tree[node]:if child != par:stack.append((child, node, d+1))def query(self, u, v):if self.depth[u] < self.depth[v]:u, v = v, u# 对齐深度for k in range(self.max_level-1, -1, -1):if self.depth[u] - (1 << k) >= self.depth[v]:u = self.parent[u][k]if u == v:return u# 同步跳转for k in range(self.max_level-1, -1, -1):if self.parent[u][k] != -1 and self.parent[u][k] != self.parent[v][k]:u = self.parent[u][k]v = self.parent[v][k]return self.parent[u][0]class Solution:def minimumWeight(self, edges: List[List[int]], queries: List[List[int]]) -> List[int]:n = len(edges)graph = defaultdict(list)for u, v, w in edges:graph[u].append((v, w))graph[v].append((u, w))seen = {0}parents = defaultdict(int)dist = defaultdict(int)tree = defaultdict(list)parents[0] = -1q = [(0, 0)]while q:d, u = q.pop(0)for v, w in graph[u]:if v in seen:continueseen.add(v)tree[u].append(v)parents[v] = udist[v] = d + wq.append((d+w, v))lca = LCA(0, tree)def get_dist(u, v):p = lca.query(u, v)return dist[u] + dist[v] - 2*dist[p]def query(u, v, w):return (get_dist(u, v) + get_dist(u, w) + get_dist(v, w)) // 2return [query(u, v, w) for u, v, w in queries]

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

http://www.dtcms.com/wzjs/397952.html

相关文章:

  • 企业网站开源系统网络推广文案策划
  • 5 网站建设的基本步骤是湖南专业关键词优化
  • 网站制作中企动力优网站优化排名技巧
  • 建设的网站百度搜不到百度资源分享网页
  • 网站开发项目推荐成都短视频代运营
  • 网站系统升级中深圳seo排名
  • 做seo推广公司网站国内疫情最新情况
  • 自己如何做黑客网站营销托管全网营销推广
  • 佛山顺德网站建设百度官网登录入口
  • 南京金九建设集团网站广西seo关键词怎么优化
  • ssh做网站步骤seo搜索引擎优化实战
  • 衡阳网站建设步骤网络服务器价格
  • 查企业的官方网站交换链接营销的典型案例
  • 汉中网站建设有限公司廊坊百度快照优化排名
  • 网站多久被百度收录知名品牌营销案例100例
  • 河源哪有做网站seo网络营销的技术
  • 杭州手机软件开发seo搜索排名
  • wordpress 和disscuz网站seo推广seo教程
  • 旅游网站建设国内外现状百度收录网址提交
  • 自己做的网站如何包装百度搜索app
  • 灰色行业做网站推广企业qq下载
  • 摄影网站建设sem百度竞价推广
  • WordPress多种类文件上传网络营销推广及优化方案
  • wordpress自定义分类无法显示百度seo优化技术
  • 徐州做网站公司哪家好seo关键词优化工具
  • 东莞企业营销型网站建设凡科网免费建站
  • 申请网站步骤品牌定位
  • 成全视频在线时间观看安顺seo
  • 谁能低价做网站支付接口6个好用的bt种子搜索引擎
  • ppt免费下载的网站白银网站seo