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

Leetcode 3547. Maximum Sum of Edge Values in a Graph

  • Leetcode 3547. Maximum Sum of Edge Values in a Graph
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3547. Maximum Sum of Edge Values in a Graph

1. 解题思路

这一题主要是在问题的分析上面。由题意易知,事实上给定的图必然只可能存在三种可能的结构:

  • 孤立的点
  • 链状结构
  • 环状结构

其中,孤立的点必然不会有贡献,可以直接忽略,我们只需要考察环状结构和链状结构。

其中,对于环状结构,其长度事实上没有影响,任何一个元素无论放在何等长度的环上面其贡献都是一致的,因为它只与其相邻元素相关。而要想要其贡献最大化,其最合适的结构必然是以最大元素为中心,然后分别向左右逐一辐射。

而对于链状结构,其构造方式和环状结构差不多,但是其首尾不相连,因此必然浪费了一次乘积结果,因此,我们应该使得两侧的元素越小越好。

综上,最佳的构造方式就是:

  • 优先将大元素分配给环;
  • 对于链状结构,按长度从高到低依次进行元素分配。

此时,我们剩下的问题就是如何找环和链了。要找链,我们只需要找到度为1的节点即可,其必为链的一侧端点,然后进行遍历即可。而对于环,只需要在剩下的节点当中随意找一个节点作为起点即可。

2. 代码实现

给出python代码实现如下:

class Solution:def maxScore(self, n: int, edges: List[List[int]]) -> int:graph = defaultdict(list)for u, v in edges:graph[u].append(v)graph[v].append(u)nodes = [u for u in range(n) if len(graph[u]) == 1] + [u for u in range(n) if len(graph[u]) == 2]def get_max(m, k, is_circle):if k == 1:return 0nums = [m-i for i in range(k)]nums = nums[1::2][::-1] + nums[::2] ans = sum([nums[i] * nums[i+1] for i in range(k-1)])return ans if not is_circle else ans + nums[0] * nums[-1]ans = 0lines = []status = [0 for _ in range(n)]for i in nodes:if status[i] == 1:continueu = ilength = 0while status[u] == 0:status[u] = 1length += 1for v in graph[u]:if status[v] == 0:u = vbreakif i in graph[u] and length > 2:ans += get_max(n, length, True)n -= lengthelse:lines.append(length)lines = sorted(lines, reverse=True)for length in lines:ans += get_max(n, length, False)n -= lengthreturn ans

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

http://www.xdnf.cn/news/5773.html

相关文章:

  • swift flask python ipad当电脑键盘 实现osu x键和z键 长按逻辑有问题 quart 11毫秒
  • Spark 缓存(Caching)
  • 2025年PMP 学习十一 第8章 项目质量管理(8.3)
  • 运行Spark程序-在Idea中
  • 基于智能家居项目 实现DHT11驱动源代码
  • Linux目录和文件
  • idea Maven 打包SpringBoot可执行的jar包
  • C语言 ——— 函数栈帧的创建和销毁
  • Qt6.5.3 windows下安装教程
  • c++STL-list的使用和迭代器
  • 【AIGC 温柔档案】:镂空蕾丝与柔和线条的唯美算法融合
  • PostgreSQL 配置设置函数
  • MySQL 8.0 OCP 英文题库解析(四)
  • STM32 修炼手册
  • PostgreSQL 服务器信号函数
  • 设计模式深度解析:AI大模型下的策略模式与模板方法模式对比解析
  • 力扣HOT100之二叉树:543. 二叉树的直径
  • web 自动化之 KDT 关键字驱动详解
  • 什么是Git?
  • 性能优化--无分支编程的实际应用场景
  • 基于动态规划的强化学习方法
  • 佰力博科技与您探讨表面电阻的测试方法及应用领域
  • 小刚说C语言刷题—1080质因子
  • Kafka 4.0版本的推出:数据处理新纪元的破晓之光
  • aardio - 虚表 —— vlistEx.listbar2 多层菜单演示
  • CSV注入攻击技术解析
  • vscode不能跳转到同一个工作区的其他文件夹
  • 为什么要在 input() 后加 .strip()?
  • 基于SSM实现的健身房系统功能实现十六
  • springboot配置tomcat端口