leetcode 2867. 统计树中的合法路径数目【筛质数+贡献法】

原题链接:2867. 统计树中的合法路径数目

题目描述:

给你一棵 n 个节点的无向树,节点编号为 1 到 n 。给你一个整数 n 和一个长度为 n - 1 的二维整数数组 edges ,其中 edges[i] = [ui, vi] 表示节点 ui 和 vi 在树中有一条边。

请你返回树中的 合法路径数目 。

如果在节点 a 到节点 b 之间 恰好有一个 节点的编号是质数,那么我们称路径 (a, b) 是 合法的 。

注意:

  • 路径 (a, b) 指的是一条从节点 a 开始到节点 b 结束的一个节点序列,序列中的节点 互不相同 ,且相邻节点之间在树上有一条边。
  • 路径 (a, b) 和路径 (b, a) 视为 同一条 路径,且只计入答案 一次 。

输入输出描述:

示例 1:

输入:n = 5, edges = [[1,2],[1,3],[2,4],[2,5]]
输出:4
解释:恰好有一个质数编号的节点路径有:
- (1, 2) 因为路径 1 到 2 只包含一个质数 2 。
- (1, 3) 因为路径 1 到 3 只包含一个质数 3 。
- (1, 4) 因为路径 1 到 4 只包含一个质数 2 。
- (2, 4) 因为路径 2 到 4 只包含一个质数 2 。
只有 4 条合法路径。

示例 2:

输入:n = 6, edges = [[1,2],[1,3],[2,4],[3,5],[3,6]]
输出:6
解释:恰好有一个质数编号的节点路径有:
- (1, 2) 因为路径 1 到 2 只包含一个质数 2 。
- (1, 3) 因为路径 1 到 3 只包含一个质数 3 。
- (1, 4) 因为路径 1 到 4 只包含一个质数 2 。
- (1, 6) 因为路径 1 到 6 只包含一个质数 3 。
- (2, 4) 因为路径 2 到 4 只包含一个质数 2 。
- (3, 6) 因为路径 3 到 6 只包含一个质数 3 。
只有 6 条合法路径。

提示:

  • 1 <= n <= 105
  • edges.length == n - 1
  • edges[i].length == 2
  • 1 <= ui, vi <= n
  • 输入保证 edges 形成一棵合法的树。

解题思路:

首先数据量有1e5,那么我们可以先预处理,线性筛筛出所有质数,便于后续处理,题目说了合法路径指的是路径上包含刚好一个质数点,那么我们dfs的同时枚举每一个质数点,考虑每一个质数点的贡献,下面画个图描述一下:

由于我们需要记录某个点出发在不经过质数点的情况最多经过多少个点,我们可以用sz[x]记录从x出发在不经过质数点的情况下最多会经过几个点,类似记忆化的思想,所以枚举每一个质数贡献的时候,如果遇到某个点的sz[y]已经被计算过了,直接拿来用即可,避免重复搜索。

时间复杂度:不考虑预处理线性筛的时间,由于采取了记忆化思想,每个点只会访问一次,所以时间复杂度为O(n)。

空间复杂度:O(n)。

cpp代码如下:

const int N=1e5+10;
typedef long long LL;
int primes[N],cnt=0;
bool st[N];
int init=[](){  //线性筛预处理所有质数st[1]=true;for(int i=2;i<N;i++){if(!st[i])primes[cnt++]=i;for(int j=0;primes[j]<=(N-1)/i;j++){st[primes[j]*i]=true;if(i%primes[j]==0)break;}}return 0;
}();
class Solution {
public:long long countPaths(int n, vector<vector<int>>& edges) {vector<vector<int>>g(n+1);vector<int>sz(n+1);for(auto& t:edges){int x=t[0],y=t[1];g[x].push_back(y);g[y].push_back(x);}vector<int>nodes;//dfs遍历在不经过指数的情况下最多经过多少个点,也就是非质数连通块大小function<void(int,int)>dfs=[&](int x,int fa){  nodes.push_back(x);for(auto& y:g[x]){if(y!=fa && st[y]){dfs(y,x);}}};LL ans=0;for(int x=1;x<=n;x++){if(st[x])continue;  //只需要枚举质数,非质数跳过int sum=0;for(int y:g[x]){if(!st[y])continue;  //y是质数,不需要在搜索if(sz[y]==0)  //没有被搜索过,搜索一下{nodes.clear();dfs(y,-1);for(int x:nodes){  //对于这个连通块中所有点都要标记一下连通块大小,避免重复计算sz[x]=nodes.size();}}ans+=(LL)sz[y]*sum;  //计算贡献sum+=sz[y];  //sum记录左边的子树大小之和}ans+=sum;  //这个也是贡献的一部分}return ans;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/705404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java学习之旅:从新手到专家的全面指南

Java作为一种广泛使用的编程语言&#xff0c;其强大的功能和跨平台的特性使其成为学习编程的优选。无论你是编程新手还是希望提升现有技能的开发者&#xff0c;掌握Java都将为你的职业生涯开启无限可能。本文将为你提供一个全面的Java学习路线图&#xff0c;帮助你从基础知识出…

群狼调研(长沙游客满意度调查) | 公园游客满意度调查指标设计

本文由群狼调研&#xff08;长沙旅游景点满意度调查&#xff09;出品&#xff0c;欢迎转载&#xff0c;请注明出处。设计公园游客满意度调查指标需要仔细考虑&#xff0c;以确保综合评估游客的体验和需求。以下是一些常见的公园游客满意度调查指标&#xff0c;您可以根据具体情…

【服务器数据恢复】ext3文件系统下硬盘坏道掉线的数据恢复案例

服务器数据恢复环境&#xff1a; 一台IBM某型号服务器上有16块FC硬盘组建RAID阵列。上层linux操作系统&#xff0c;ext3文件系统&#xff0c;部署有oracle数据库。 服务器故障&检测&#xff1a; 服务器上跑的业务突然崩溃&#xff0c;管理员发现服务器上有2块磁盘的指示灯…

PyQt6的开发流程(密码生成小程序为例)

PyQt6的开发流程&#xff08;密码生成小程序为例&#xff09; 文章目录 PyQt6的开发流程&#xff08;密码生成小程序为例&#xff09;一、流程介绍与概览1. 界面与逻辑分离的开发流程2. PyQt6的开发流程 二、打开 designer.exe 创建文件三、用QT设计师绘制界面保存成ui1. QT常用…

Android之UI Automator框架源码分析(第九篇:UiDevice获取UiAutomation对象的过程分析)

前言 通过UiDevice的构造方法&#xff0c;UiDevice对象持有的几个对象一部分是在构造方法中创建的&#xff08;初始化&#xff09;&#xff0c;它持有的每个对象都是分析的重点 备注&#xff1a;当前对象持有的对象&#xff0c;它的位置一般在实例变量创建时或者构造方法中&…

遇见您的私人法律顾问:智能法律大模型,智能解答您的法律困惑

遇见您的私人法律顾问&#xff1a;智能法律大模型&#xff0c;智能解答您的法律困惑 为了让法律服务深入到每个人的身边&#xff0c;让更多的人能够得到法律帮助&#xff0c;开启了【律知】这个项目, 致力于打造一系列引领法律智能化的大模型。AI 法律模型是一位虚拟法律顾问&…

vue3实现页面跳转

有需求是在vue项目中实现点击按钮完成页面跳转。这里不适用a标签&#xff0c;而是用vue自带的vue-router。 首先看一下项目结构 src │ App.vue │ main.js │ ├─router │ index.js │ └─views index.vue content.vue 可以看到&…

【Spring连载】使用Spring Data的Repositories----核心概念Core concepts

【Spring连载】使用Spring Data的Repositories----核心概念Core concepts 实体状态检测策略 Spring Data存储库抽象中的中心接口是Repository。它使用要管理的域类以及域类的标识符类型作为类型参数。此接口主要充当标记接口&#xff0c;用于捕获要使用的类型&#xff0c;并帮助…

FPS游戏之漫谈游戏服务器架构设计

FPS射击游戏的服务器架构设计需要考虑到许多因素&#xff0c;包括性能、可扩展性、安全性和稳定性。以下是一个基本的FPS游戏服务器架构设计 1.登录服务器 在FPS射击游戏中&#xff0c;登录服务器主要负责以下几个方面的职责&#xff1a; 用户身份验证&#xff1a;登录服务器…

探索比特币现货 ETF 对加密货币价格的潜在影响

撰文&#xff1a;Sean&#xff0c;Techub News 文章来源Techub News&#xff0c;搜Tehub News下载查看更多Web3资讯。 自美国比特币现货交易所交易基金&#xff08;ETF&#xff09;上市以来&#xff0c;比特币现货 ETF 的相关信息无疑成为了影响比特币价格及加密货币市场走向…

德国半导体公司 TDK-Micronas 通过 OpenText ETX 加速产品开发,缩短研发上市时间

TDK-Micronas 存在的挑战 服务器在分散的开发中心上运行&#xff1b;需要减少研发&#xff08;R&D&#xff09;时间&#xff1b;需要集中管理&#xff0c;包括用户配置文件&#xff1b;跨多地保护知识产权 &#xff08;IP&#xff09;。 成果 快速的应用程序访问缩短整体…

使用向量数据库pinecone构建应用03:推荐系统 Recommender Systems

Building Applications with Vector Databases 下面是这门课的学习笔记&#xff1a;https://www.deeplearning.ai/short-courses/building-applications-vector-databases/ Learn to create six exciting applications of vector databases and implement them using Pinecon…

pycharm安装Amazon CodeWhisperer 免费AI辅助编程插件教程

一、github copilot 和 Amazon CodeWhisperer区别 Copilot非常易于使用&#xff0c;并与所有主要的代码编辑器进行了简化集成。GitHub Copilot针对七种主要的编程语言进行了优化&#xff08;详见下表&#xff09;&#xff0c;但也可以生成其他语言和各种框架的建议。 Copilot…

抖音视频批量下载工具|视频评论数据挖掘软件

这款基于C#开发的抖音视频批量下载工具&#xff0c;为用户提供了便捷的视频搜索和下载功能&#xff0c;让您可以轻松获取抖音平台上的热门视频内容。无论是通过关键词搜索抓取还是通过分享链接下载单个视频&#xff0c;都能满足用户快速获取视频资源的需求。 主要功能模块&…

非有理 B 样条曲线插值方法——给定点数据的局部抛物线插值(可进行封闭曲线插值)

一、局部曲线插值预备知识 给定 { Q k } ( k 0 , 1 , ⋯ , n ) \{\pmb Q_k\}(k0,1,\cdots,n) {Qk​}(k0,1,⋯,n)&#xff0c;局部曲线插值是指创建 n n n 条多项式或有理曲线段&#xff1a; C i ( u ) ( i 0 , 1 , ⋯ , n − 1 ) \pmb C_i(u)(i0,1,\cdots,n-1) Ci​(u)(i0…

LCR 173. 点名

解题思路&#xff1a;二分法 class Solution {public int takeAttendance(int[] records) {int i 0, j records.length - 1;while(i < j) {int m (i j) / 2;if(records[m] m) i m 1;else j m - 1;}return i;} }

TCPIP协议存在的安全隐患以及对应的防范措施

TCP/IP协议&#xff0c;作为网络通信的标准协议&#xff0c;是一组不同层次上的多个协议的组合。由于在其设计初期过分强调其开放性和便利性&#xff0c;却没有认真仔细考虑到它的安全性问题&#xff0c;因此协议中存在有诸多的安全漏洞。协议缺陷造成的安全漏洞&#xff0c;很…

二叉树的链式结构实现

二叉树的链式结构实现 1. 链式存储2. 二叉树的遍历前序遍历中序遍历后序遍历 3. 二叉树遍历的代码实现前序遍历中序遍历后序遍历 4. 二叉树各种相关函数的实现二叉树节点个数二叉树叶子节点个数二叉树的高度二叉树第k层节点个数二叉树查找值为x的节点 5. 代码验证 1. 链式存储 …

东莞IBM服务器维修之IBM x3630 M4阵列恢复

记录东莞某抖音电商公司送修一台IBM SYSTEM X3630 M4文档服务器RAID6故障导致数据丢失的恢复案例 时间&#xff1a;2024年02月20日&#xff0c; 服务器品牌&#xff1a;IBM System x3630 M4&#xff0c;阵列卡用的是DELL PERC H730P 服务器用途和用户位置&#xff1a;某抖音电…

Fastapi进阶用法,路径参数,路由分发,查询参数等详解

文章目录 1、路径操作1.路径操作装饰器1.tags 标签2.summary 接口描述的总结信息3.describe: 接口信息的详细描述4.response_description&#xff1a;响应描述5.deprecated&#xff1a;接口是否废弃&#xff0c;默认是False 2.fastapi路由分发include_router 2、请求与响应2.1、…