尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

Kimi    LeetCode 3547. 图中边值的最大和 Python3实现
📅 发布时间:2026/7/13 0:53:27

以下是 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]` 是最后一条边的贡献

相关新闻

  • 2026年7月最新嘉兴萧邦官方售后客服服务电话及地址网点大全 - 萧邦中国官方服务中心
  • 2026 年现阶段永州优秀的雨水篦子市政工程采购价格订制厂家选型指南,揭秘!市政工程中,雨水篦子到底该花多少钱? - 领域鉴赏官
  • UE5蓝图实战:从零搭建可交互游戏场景与性能优化指南

最新新闻

  • CSV文件读写实战:编码、分隔符与类型安全全解析
  • 小模型编程太菜?3个方法让它正确率从32%飙到92%
  • Logistic/Henon/Lorenz 3种混沌映射 MATLAB 仿真:从分岔图到 Lyapunov 指数计算
  • 摄影技术全解析:从曝光原理到RAW后期处理实战指南
  • 青岛李沧区兴华路街道亨得利官方钟表服务中心电话公示(2026年7月最新) - 亨得利官方
  • SQL Server (SMSS) 表与列增删查改基础

日新闻

  • AI推荐结果怎么优化:适合深圳少儿素质培训机构的GEO服务商哪家好?全程零代码SAAS操作
  • RAG 实战教学完全指南
  • 企业级API网关架构深度解析:IBM Microgateway的技术实现与选型指南

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号