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

Leetcode 2867. Count Valid Paths in a Tree

  • Leetcode 2867. Count Valid Paths in a Tree
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:2867. Count Valid Paths in a Tree

1. 解题思路

这一题思路上的话由于要求路径上有且仅有一个质数点,因此,一个直接的思路就是考察所有质数的点作为中心点时,其辐射出去的非质数点的个数。

假设一个质数点 p p p上有 k k k个合数子节点,然后每一个合数子节点对应的只包含合数的子树当中的节点个数分别为 n 1 , ⋯ n k n_1, \cdots n_k n1,nk个,那么,包含且仅包含 p p p的路径个数为:

  1. p p p作为路径的一个节点: N = ∑ i = 1 k n i N = \sum\limits_{i=1}^{k}n_i N=i=1kni
  2. p p p作为路径的一个中间节点: N = ∑ i = 1 k ∑ j = 1 , j ≠ i k n i × n j = ∑ i = 1 k n i ( ∑ j = 1 k n j − n i ) / 2 N = \sum\limits_{i=1}^{k}\sum\limits_{j=1, j\neq i}^{k} n_i \times n_j=\sum\limits_{i=1}^{k}n_i(\sum\limits_{j=1}^{k}n_j - n_i) / 2 N=i=1kj=1,j=ikni×nj=i=1kni(j=1knjni)/2

由此,问题就转化为只要求得每一个质数节点 p p p周围相邻的合数节点 u u u作为根节点时的只包含合数节点的子树的节点的个数。

而这个问题只需要用一个深度优先遍历就可以完成了。当然,为了优化执行效率,我们加上了一个cache来对其进行优化。

2. 代码实现

给出最终的python代码实现如下:

@lru_cache(None)
def get_primes():n = 10**5status = [0 for _ in range(n)]primes = []for i in range(2, n):if status[i] == 1:continueprimes.append(i)for j in range(i, n, i):status[j] = 1return primesPRIMES = get_primes()class Solution:def countPaths(self, n: int, edges: List[List[int]]) -> int:if n == 1:return 0primes = PRIMES[:bisect.bisect_right(PRIMES, n)]prime_set = set(primes)graph = defaultdict(list)for u, v in edges:graph[u].append(v)graph[v].append(u)@lru_cache(None)def dfs(u, pre):res = 1for v in graph[u]:if v != pre and v not in prime_set:res += dfs(v, u)return resdef query(u):nodes = [dfs(v, -1) for v in graph[u] if v not in prime_set]res = 0s = sum(nodes)for k in nodes:res += k * (s-k)return res // 2 + sreturn sum(query(u) for u in primes)

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

相关文章:

Leetcode 2867. Count Valid Paths in a Tree

Leetcode 2867. Count Valid Paths in a Tree 1. 解题思路2. 代码实现 题目链接:2867. Count Valid Paths in a Tree 1. 解题思路 这一题思路上的话由于要求路径上有且仅有一个质数点,因此,一个直接的思路就是考察所有质数的点作为中心点时…...

Jtti:Ubuntu下如何创建XFS文件系统的LVM

在 Ubuntu 下创建一个 XFS 文件系统的 LVM(Logical Volume Manager)分区需要一系列步骤。以下是详细的步骤: 1. 创建物理卷 (PV) 首先,将要用于 LVM 的硬盘分区(物理卷)初始化为物理卷。假设你有一个硬盘…...

做销售管理分析需要看哪些关键指标?

做销售管理分析需要看哪些关键指标? 销售管理分析时抓取关键指标,有着能够【分析和判断销售趋势、为销售决策提供数据支持、优化销售流程和客户管理】等的好处 在了解了分析关键指标的目的之后,我们就可以根据企业的需求来确定关键指标&…...

【Python】自动完成手写字体图片贴入以及盖章工具

简介 该工具完成了如下功能: 1.将文字转换为手写体填入到模板文件中 2.自动将文字转换为盖章格式填入到模板文件中 3.字体格式可以替换 4.有配置文件进行扩展功能 功能模块 1.界面模块 import sys from PyQt5.QtWidgets import QApplication, QMessageBox, QWid…...

基于Xml方式Bean的配置-初始化方法和销毁方法

SpringBean的配置详解 Bean的初始化和销毁方法配置 Bean在被实例化后&#xff0c;可以执行指定的初始化方法完成一些初始化的操作&#xff0c;Bean在销毁之前也可以执行指定的销毁方法完成一些操作&#xff0c;初始化方法名称和销毁方法名称通过 <bean id"userService…...

实时更新进度条:JavaScript中的定时器和异步编程技巧

前言 在Web开发中&#xff0c;有许多场景需要实时地更新页面上的进度&#xff0c;例如上传文件、数据处理等。本文将介绍如何利用JavaScript中的定时器和异步编程技巧来实现实时更新进度&#xff0c;并探讨一些其他解决方案。 处理进度实时更新&#xff1a; 利用异步编程实现实…...

【简单图论】CF898 div4 H

Problem - H - Codeforces 题意&#xff1a; 思路&#xff1a; 手玩一下样例就能发现简单结论&#xff1a; v 离它所在的树枝的根的距离 < m 离这个根的距离时是 YES 否则就是NO 实现就很简单&#xff0c;先去树上找环&#xff0c;然后找出这个根&#xff0c;分别给a 和…...

【大虾送书第十一期】适合新手自学的网络安全基础技能“蓝宝书”:《CTF那些事儿》

目录 &#x1f96e;写在前面 &#x1f96e;内容简介 &#x1f96e;读者对象 &#x1f96e;专家推荐 &#x1f96e;目录 &#x1f96e;文末福利 &#x1f990;博客主页&#xff1a;大虾好吃吗的博客 &#x1f990;专栏地址&#xff1a;免费送书活动专栏地址 写在前面 CTF比赛是快…...

IDEA安装离线插件后重启无法打开

解决方法 1.找到插件安装目录删除插件 插件的位置一般在C:\Users\19058\AppData\Roaming\JetBrains\IntelliJIdea2021.1\plugins 高亮部分是自己电脑的用户位置&#xff0c;把报错前的刚才最新安装的插件删除&#xff0c;再尝试打开idea即可解决该问题 2.补充说明 AppData是个隐…...

论软件的可靠性设计

摘要 2021年6月&#xff0c;我所在的公司中标某集团保险大数据平台一体化研发项目&#xff0c;该项目总投资2000万人民币&#xff0c;项目周期为2年&#xff0c;通过该项目&#xff0c;搭建该集团保险大数据平台&#xff0c;一方面将全国所有保险业务全部入库并保存&#xff0…...

AG35学习笔记(一):debug串口抓取模组log、debug串口测试AT指令、echo命令通过串口发送16进制数据

目录 一、概述二、抓取模组log2.1 硬件接口2.2 用户登录2.3 相关指令 三、测试AT指令3.1 查看端口3.2 进入模式 四、串口发16进制echo使用 一、概述 二、抓取模组log 在之前记录了通过USB&#xff0c;使用移远工具Qwinlog来抓取log&#xff08;3.3 抓取模组log&#xff09;。…...

Python进阶学习----一闭三器

目录 ​编辑 前言 一.三器 1. 迭代器&#xff08;Iterator&#xff09; 1.1 什么是可迭代对象 1.2什么是迭代器 1.3案例演示&#xff1a; 以下是一个简单的迭代器示例&#xff0c;遍历一个列表并打印每个元素&#xff1a; 1.4迭代器总结 2. 生成器&#xff08;Generat…...

C/S架构学习之TCP客户端

TCP客户端的实现流程&#xff1a;一、创建套接字&#xff08;socket函数&#xff09;&#xff1a;通信域选择IPV4网络协议、流式套接字&#xff1b; int sockfd socket(AF_INET,SOCK_STREAM,0); 二、填充服务器的网络信息结构体&#xff08;struct sockaddr_in serveraddr&…...

系统集成|第十二章(笔记)

目录 第十二章 沟通管理12.1 沟通的基本概念12.2 主要过程12.2.1 规划沟通管理12.2.2 管理沟通12.2.3 控制沟通 12.3 常见问题 上篇&#xff1a;第十一章、项目人力资源管理 第十二章 沟通管理 沟通管理在项目计划、执行、监控过程中具有重要的作用&#xff0c;项目经理应该拿…...

图神经网络(GNN)最新顶会论文汇总【附源码】

得益于强大的建模和分析能力&#xff0c;图神经网络&#xff08;GNN&#xff09;在社交网络分析、推荐系统、知识图谱、文本分析、等诸多领域得到了广泛的应用&#xff0c;目前已成为了人工智能领域的热门研究方向。 在今年的各大顶会获奖论文中&#xff0c;图神经网络相关的论…...

【算法】算法设计与分析 课程笔记 第二章 递归与分治策略

2.1 递归 直接或间接地调用自身的算法称为递归算法。 用函数自身给出定义的函数称为递归函数。 2.1.1 阶乘 首先得想到一个求阶乘的函数&#xff1a; 这个函数的下面那个式子就用到了调用自身&#xff0c;所以可以用递归来实现&#xff0c;将主问题拆分成若干层的子问题&am…...

Java客户端_Apache Curator操作Zookeeper

Curator是 Netflix公司开源的一套ZooKeeper客户端框架。和ZkClient一样&#xff0c;Curator解决了很多ZooKeeper客户端非常底层的细节开发工作&#xff0c;包括连接重连、反复注册Watcher和 NodeExistsException异常等&#xff0c;目前已经成为了Apache的顶级项目,是全世界范围…...

14:00面试,14:07就出来了,问的问题有点变态

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到8月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%,…...

《你好,C语言》:从另一个视角学习并重新审视C语言的意义

《你好&#xff0c;C语言》&#xff1a;从另一个视角学习并重新审视C语言的意义 尽管C语言诞生了这么多年&#xff0c;但是它依然活跃在开发者一线&#xff0c;不可否认的是C语言的确有它独特的魅力。本文将从一个全新的视角&#xff0c;重新带领大家学习领悟C语言的奥秘&#…...

信创之国产浪潮电脑+统信UOS操作系统体验1:硬件及软件常规功能支持情况介绍

一、引言 由于公司要求支持国产信创&#xff0c;最近办公的笔记本电脑换成了软硬件全国产&#xff0c;由于国产操作系统是在开源linux基础上演进的&#xff0c;在换之前&#xff0c;非常担心操作不方便&#xff0c;周边应用软件少&#xff0c;功能差&#xff0c;内心是比较抗拒…...

专业级流媒体下载器实战解析:7个高效配置技巧掌握N_m3u8DL-RE

专业级流媒体下载器实战解析&#xff1a;7个高效配置技巧掌握N_m3u8DL-RE 【免费下载链接】N_m3u8DL-RE Cross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文. 项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8D…...

化疗对女性的杀伤力

化疗人群普遍存在体质虚弱、免疫力下降、食欲差、体力透支、肠胃不适等问题&#xff0c;白之品海参凭借其天然温和的营养特点&#xff0c;能在多个方面提供针对性支持&#xff1a;温和滋补&#xff0c;不刺激肠胃海参性平温和&#xff0c;不燥热、不寒凉&#xff0c;对化疗后敏…...

Awesome Rust核心库精选:异步编程与网络开发

Awesome Rust核心库精选&#xff1a;异步编程与网络开发 本文深入探讨了Rust生态系统中的核心库&#xff0c;重点分析了异步运行时&#xff08;Tokio与async-std&#xff09;、网络编程库、HTTP客户端/服务器框架、数据序列化工具链以及密码学与安全相关库。通过对比分析各库的…...

零代码打造植物养护助手:Android Sunflower的Jetpack Compose实践指南

零代码打造植物养护助手&#xff1a;Android Sunflower的Jetpack Compose实践指南 【免费下载链接】sunflower A gardening app illustrating Android development best practices with migrating a View-based app to Jetpack Compose. 项目地址: https://gitcode.com/gh_mi…...

罗技鼠标宏终极指南:绝地求生压枪脚本完整配置教程

罗技鼠标宏终极指南&#xff1a;绝地求生压枪脚本完整配置教程 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 你是否在《绝地求生》中被武器后坐…...

如何用5个步骤构建企业级智能SQL工具?自然语言转SQL全攻略

如何用5个步骤构建企业级智能SQL工具&#xff1f;自然语言转SQL全攻略 【免费下载链接】sqlcoder SoTA LLM for converting natural language questions to SQL queries 项目地址: https://gitcode.com/gh_mirrors/sq/sqlcoder 在数据驱动决策的时代&#xff0c;自然语言…...

(新)IEEE Access论文投稿全流程实战解析

1. IEEE Access投稿前的准备工作 第一次投稿到IEEE Access这种国际期刊&#xff0c;很多人都会感到无从下手。作为一个审过稿也投过稿的老手&#xff0c;我完全理解这种忐忑。别担心&#xff0c;跟着我的步骤走&#xff0c;保证你能顺利完成整个投稿流程。 首先得明确一点&…...

解锁音频频域密码:Spek声学频谱分析工具的全场景应用指南

解锁音频频域密码&#xff1a;Spek声学频谱分析工具的全场景应用指南 【免费下载链接】spek Acoustic spectrum analyser 项目地址: https://gitcode.com/gh_mirrors/sp/spek 在数字音频处理领域&#xff0c;准确理解信号的频率特性是解决音质问题、优化音频体验的关键。…...

忍者像素绘卷入门必看:Z-Image-Turbo与Stable Diffusion 16-Bit插件对比

忍者像素绘卷入门必看&#xff1a;Z-Image-Turbo与Stable Diffusion 16-Bit插件对比 1. 像素艺术创作新选择 在数字艺术创作领域&#xff0c;像素风格始终占据着独特地位。对于想要创作16-Bit复古游戏风格作品的艺术家来说&#xff0c;选择合适的工具至关重要。本文将对比分析…...

3 鸿蒙分布式数据跨终端同步实操方案 | 鸿蒙开发筑基实战

鸿蒙分布式数据跨终端同步实操方案 | 鸿蒙开发筑基实战 作者&#xff1a;杨建宾&#xff08;华夏之光永存&#xff09; 摘要 本文讲解鸿蒙系统下跨终端数据同步的完整实操流程&#xff0c;从权限配置、分布式数据初始化&#xff0c;到数据读写、同步测试&#xff0c;全部使用通…...