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

Kimi LeetCode 3547. 图中边值的最大和 Python3实现

以下是 LeetCode 3547. 图中边值的最大和 的 Python3 实现。

解题思路

由于每个节点最多与其他两个节点相连,整个图由若干链和环组成。

1. 连通分量分类:用 DFS/BFS 找出所有连通分量。若分量内所有节点度数均为 2,则为环;否则为链(孤立点不贡献边权,忽略)。
2. 处理顺序:先处理环(每个节点有两条边,大数在环中能产生更多乘积),再处理链(按长度降序,长链优先拿大数)。
3. 填数策略:将剩余的最大数放在连通分量中间,次大数交替向两边扩展,使得大数尽量相邻(双端队列模拟)。

时间复杂度 O(n \log n),空间复杂度 O(n)。

---

Python3 代码

```python
from collections import deque
from typing import List

class Solution:
def maxScore(self, n: int, edges: List[List[int]]) -> int:
# 建图
graph = [[] for _ in range(n)]
for u, v in edges:
graph[u].append(v)
graph[v].append(u)

seen = [False] * n
cycle_sizes = [] # 环的大小
path_sizes = [] # 链的大小

# 遍历每个连通分量
for i in range(n):
if seen[i]:
continue

# DFS 收集连通分量
component = []
stack = [i]
seen[i] = True
while stack:
u = stack.pop()
component.append(u)
for v in graph[u]:
if not seen[v]:
seen[v] = True
stack.append(v)

# 判断是否为环:所有节点度数均为 2
is_cycle = True
for u in component:
if len(graph[u]) != 2:
is_cycle = False
break

if is_cycle:
cycle_sizes.append(len(component))
elif len(component) > 1:
path_sizes.append(len(component))
# 孤立点(size == 1)不贡献边权,无需处理

ans = 0

# 先处理环:从剩余的最大数中分配
for size in cycle_sizes:
ans += self._calc_score(n - size + 1, n, True)
n -= size

# 链按长度从大到小排序,优先处理长链
path_sizes.sort(reverse=True)
for size in path_sizes:
ans += self._calc_score(n - size + 1, n, False)
n -= size

return ans

def _calc_score(self, left: int, right: int, is_cycle: bool) -> int:
"""
将 [left, right] 范围内的数填入一个连通分量,计算最大边权和。

策略:双端队列模拟"中间放大数,向两边递减"的排列。
初始放入两个 right,从 right-1 递减到 left,每次取出队首与当前值相乘,
再将当前值放入队尾。
"""
dq = deque()
dq.append(right)
dq.append(right)
score = 0

for val in range(right - 1, left - 1, -1):
window_val = dq.popleft()
score += window_val * val
dq.append(val)

# 如果是环,首尾两个节点也相邻,额外加上首尾乘积
if is_cycle:
score += dq[0] * dq[-1]

return score
```

---

关键说明

要点 说明
连通分量分类 所有节点度数均为 2 → 环;否则为链(含孤立点)
处理顺序 环优先于链,因为环的每个节点都有两条边,大数在环中能产生更多乘积;链按长度降序,长链优先拿大数
`_calc_score` 双端队列模拟最优排列。例如 `[7..11]` 填入 5 个节点的链,排列为 `8-10-11-9-7`,边权和 `80+110+99+63 = 352`
环额外处理 环首尾相连,所以 `dq[0] * dq[-1]` 是最后一条边的贡献

http://www.jsqmd.com/news/1177295/

相关文章:

  • C++游戏引擎多线程渲染10大陷阱与避坑指南
  • 【AI 工具的碎片化】把“多模型协同“从奢侈品变成标配
  • 环保木石板哪家值得推荐,国内榜首实力商家测评 - 互联网科技品牌测评
  • Github周刊2026W28 | Meetily+8.6k星、OfficeCLI+6.5k星、Caveman削减65%Token、Orca并行代理编排、Cube Sandbox启动
  • 2026年7月最新嘉兴萧邦官方售后客服服务电话及地址网点大全 - 萧邦中国官方服务中心
  • 2026年最新教程:手机上收到Word文件怎么转成PDF转发 - 图片处理研究员
  • Midjourney动态模糊速成课:10分钟掌握--sref锚定+--stylize动态权重+--seed锁帧三重同步术
  • 2026年国内压力传感器实力厂家盘点名录 - 起跑123
  • 2026年四川地区专业吨桶企业服务能力与选择价值深度分析 - 品牌鉴赏官2026
  • UE5蓝图实战:从零搭建可交互游戏场景与性能优化指南
  • Kimi LeetCode 3544. 子树反转和 C语言实现
  • 2026 年现阶段永州优秀的雨水篦子市政工程采购价格订制厂家选型指南,揭秘!市政工程中,雨水篦子到底该花多少钱? - 领域鉴赏官
  • ACTI 典型
  • 脆弱肌面膜哪家效果好:蜜妙诗成效显著 - MXyuyu
  • 天梭官方售后服務全面升級:2026年6月最新全國熱線、網點地址及收費標準一覽 - 天梭服务中心
  • ChatGPT Windows 客户端一直提示「Windows 安装未完成」?最终发现是 Codex 配置文件坏了
  • ChatGPT、Codex、Plus、Pro:AI 时代真正重要的不是模型调用,而是控制平面
  • 2026年PE电熔管件厂家实测调研:实力梯队全景解析 - 起跑123
  • 2026 年新发布:遵义评价高的自动弯管机供应商找哪家,弯管效率翻倍:这台机器如何颠覆传统工艺? - 领域鉴赏官
  • Unity UI特效性能优化:UIParticle原理、Canvas合批与实战策略
  • 亲身到店探访广州伯爵官方售后服务中心|全新热线和维修地址(2026年7月最新) - 亨得利钟表维修中心
  • Kimi LeetCode 3547. 图中边值的最大和 Rust实现
  • 2026年轻编绳采购指引 重庆及西南地区靠谱厂商选择参考 - 热点品牌推荐
  • 阜阳本地找超白胚木纹砖 线下实体店地址及选购指南 - 热点品牌推荐
  • 亨得利官方名表服务中心|维修地址及售后热线权威信息通告(2026年7月最新) - 亨得利官方博客
  • 长沙百达翡丽回收价格查询与各大平台实测排行(2026年7月最新数据) - 天价名表回收平台
  • 2026年留学生求职服务行业测评报告:机构综合实力对比与选择避坑指南 - 互联网科技品牌测评
  • 从 LLM 到 Agentic SDLC:ChatGPT Pro、Plus 与 CODEX 如何重构软件开发生命周期
  • 宝珀回收价格查询与靠谱回收平台实测排行(2026年7月最新) - 宝珀官方售后服务中心
  • 2026浙江省企业必看:支持语义分析的GEO优化工具核心价值与选型逻辑 - 企智芯