2024.2.27力扣每日一题——统计树中的合法路径数目

2024.2.27

      • 题目来源
      • 我的题解
        • 方法一 埃氏筛+深度优先遍历

题目来源

力扣每日一题;题序:2867

我的题解

方法一 埃氏筛+深度优先遍历

分别以质数节点为根,用「深度优先搜索」的方式,递归搜索所有的非质数的子树,并求出所有子树的大小,搜索过程中只搜索非质数节点。任何两个来自不同子树的节点,其路径都通过质数根节点,路径上恰好只有根节点一个质数节点,根据题意路径是合法的。只需要把所子树大小,两两相乘并求和,就可以得到包含根节点的所有合法路径。
具体步骤:

  1. 使用欧拉筛计算每个节点是否是质数节点
  2. 从质数节点开始进行深度优先遍历,直到遍历到另一个质数节点截止
  3. 把所子树大小,两两相乘并求和

时间复杂度:O(n×loglogn),其中 n是要筛查的数字范围。
空间复杂度:O(n)

class Solution {boolean[] isPrime;public long countPaths(int n, int[][] edges) {isPrime=new boolean[n+1];initPrime(n+1);List<Integer>[] g=createGraph(n,edges);long res=0;// 子树的大小long[] count=new long[n+1];List<Integer> visited=new ArrayList<>();for(int i=1;i<=n;i++){//需要从质数节点开始深搜if(!isPrime[i])continue;//记录与当前节点单独组成合法路径的节点数long cur=0;for(int j:g[i]){if(isPrime[j])continue;if(count[j]==0) {//每一个质数节点的已遍历节点需要重置visited.clear();//对于每个质数节点构造虚拟的前驱节点0dfs(g, visited, j, 0);//有多少个可以与当前质数节点构成合法路径的节点long cnt = visited.size();//for (int k : visited)count[k] = cnt;}// 当前子树与其他子树和的乘积res+=count[j]*cur;//更新所有子树和cur+=count[j];}res+=cur;}return res;}public void dfs(List<Integer>[] g,List<Integer> visited,int index,int pre){visited.add(index);for(int next:g[index]){//next!=pre防止循环遍历   !isPrime[next]邻接节点不是质数节点if(next!=pre&&!isPrime[next])dfs(g,visited,next,index);}}public List<Integer>[] createGraph(int n,int[][] edges){List<Integer>[] G=new ArrayList[n+1];for(int i=0;i<=n;i++){G[i]=new ArrayList<>();}for(int[] t:edges){int from=t[0];int to=t[1];G[from].add(to);G[to].add(from);}return G;}public void initPrime(int n){Arrays.fill(isPrime,true);isPrime[1]=false;for(int i=2;i*i<n;i++){if(isPrime[i]){for(int j=i*i;j<n;j+=i)isPrime[j]=false;}}}}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~

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

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

相关文章

Android Monkey自动化测试

monkey一般用于压力测试&#xff0c;用户模拟用户事件 monkey 基本用法 adb shell monkey [参数] [随机事件数]monkey常用命令 -v&#xff1a;用于指定反馈信息级别&#xff0c;总共分三个等级-v -v -vadb shell mokey -v -v -v 100-s&#xff1a;用于指定伪随机数生成器的种…

CentOS7安装flink1.17完全分布式

前提条件 准备三台CenOS7机器&#xff0c;主机名称&#xff0c;例如&#xff1a;node2&#xff0c;node3&#xff0c;node4 三台机器安装好jdk8&#xff0c;通常情况下&#xff0c;flink需要结合hadoop处理大数据问题&#xff0c;建议先安装hadoop&#xff0c;可参考 hadoop安…

impnt只读,燕用,必填,提示词(占位符)属性分别是什么

readonly 属性规定输入字段为只读&#xff08;不能修改&#xff09; <input type"text" placeholder"点我啊" readonly/> disabled 属性规定输入字段是禁用的 <input type"text" placeholder"点我啊" disabled/> re…

XXLJob中GLUE模式实现在线编写java/shell/python/php/nodejs/powerShell---SpringCloud工作笔记202

1.起因: 之前就一直想实现类似的功能,今天总于找到有可以参考的东西了,这个思路可以帮助实现这种功能. 2.获得灵感 就是:我想实现通过在线编写代码,来扩展我们平台的能力,这样随着业务的扩展,不用我们每次都修改了代码,再去部署,这样就比较麻烦,今天偶尔发现,对于xxljob来说.有…

OSCP靶场--ProStore

OSCP靶场–ProStore 考点(node.js代码注入gdb-list源文件c语言命令执行) 1.nmap扫描 ## ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.200.250 -sV -sC -Pn --min-rate 2500 -p- Starting Nmap 7.92 ( https://nmap.org ) at 2024-04-01 09:18 EDT Nmap scan report…

Stream2Graph论文翻译

Stream2Graph: Dynamic Knowledge Graph for Online Learning Applied in Large-scale Network Abstract 知识图谱(KG)是用于存储某个领域(医疗保健、金融、电子商务、ITOps等)中的知识的有价值的信息来源。大多数工业KG本质上是动态的&#xff0c;因为它们定期更新流数据(客…

Scala第十八章节(Iterable集合、Seq集合、Set集合、Map集合以及统计字符个数案例)

Scala第十八章节 章节目标 掌握Iterable集合相关内容.掌握Seq集合相关内容.掌握Set集合相关内容.掌握Map集合相关内容.掌握统计字符个数案例. 1. Iterable 1.1 概述 Iterable代表一个可以迭代的集合, 它继承了Traversable特质, 同时也是其他集合的父特质. 最重要的是, 它定…

git tag 恢复代码

在Git中&#xff0c;标签&#xff08;tag&#xff09;用于标记特定的提交&#xff0c;它们并不直接涉及恢复代码的过程。恢复代码通常意味着回退到某个历史提交或找回之前删除的文件。虽然标签可以帮助你定位到特定的提交&#xff0c;但恢复代码本身需要使用其他Git命令。 如果…

python文件的写入操作

文件的写入和追加 import time #1.打开文件 fopen("F:/python/helloworld/1.txt","w",encoding"UTF-8")#2.文件写入 f.write("hello world") #3.内容刷新 f.flush()#关闭文件 内置了flush功能 f.close()#追加内容 fopen("F:/…

windows无法使用hadoop报错:系统找不到路径

在windows下安装hadoop-3.1.4,进行环境变量配置后&#xff0c;打开window命令行窗口测试hadoop命令&#xff0c;报错&#xff0c;如图所示&#xff1a; 方案&#xff1a;由于JAVA_HOME路径有空格导致&#xff0c;可修改hadoop下\etc\hadoop\hadoop_env.cmd文档中set JAVA_HOME以…

Kubernetes(k8s):如何进行 Kubernetes 集群健康检查?

Kubernetes&#xff08;k8s&#xff09;&#xff1a;如何进行 Kubernetes 集群健康检查&#xff1f; 一、节点健康检查1、使用 kubectl 查看节点状态2、查看节点详细信息3、检查节点资源使用情况 2、Pod 健康检查2.1、 使用 kubectl 查看 Pod 状态2.2、 查看特定 Pod 的详细信息…

JQuery的选择器有哪些?

首先我们需要先了解一下什么是JQuery&#xff0c;并知晓它的概念是什么 概念&#xff1a; 官方概念&#xff1a; jQuery是一个快速&#xff0c;小型且功能丰富的JavaScript库。借助易于使用的API&#xff08;可在多种浏览器中使用&#xff09;&#xff0c;使HTML文档的遍历和操…

Leetcode 228 392

题目 228. 汇总区间 思路 用双指针解决&#xff0c;left指向有序区间的起点&#xff0c;right指向有序区间的终点1&#xff0c;判断right指向的区间是否有序则根据nums[right] right - left nums[left]&#xff1b; 代码 public List<String> summaryRanges(int[] nums…

Oracle数据库常见 问题 或 报错 集合

【报错】字段长度不足 一般字段长度不够时报错&#xff1a; Cause: java.sql.SQLException: ORA-12899: value too large for colum “列名” 【报错】修改字段长度&#xff0c;提示资源正忙 以pl/sql为例&#xff1a; ctrl选中表&#xff0c;在列选项卡下修改字段长度&#x…

基于 java + Springboot + vue +mysql 大学生实习管理系统(含源码)

目录 &#x1f4da; 前言 &#x1f4d1;摘要 &#x1f4d1;实习管理系统的特点 &#x1f4d1;使用架构 &#x1f4da; 总体设计 &#x1f4da; 数据库设计 &#x1f4ac; 系统公告实体属性 &#x1f4ac; 单位成绩实体属性 &#x1f4ac; 学生实体属性 &#x1f4da; 系…

[已解决]Vue3+Element-plus使用el-dialog对话框无法显示

文章目录 问题发现原因分析解决方法 问题发现 点击按钮&#xff0c;没有想要的弹框 代码如下 修改 el-dialog到body中&#xff0c;还是不能显示 原因分析 使用devtool中vue工具进行查看组件结构 原因在于&#xff0c;在一个局部组件(Detail->ElTabPane->…)中使用…

Qt实现Kermit协议(三)

3 实现 3.2 KermitSendFile 该模块实现了Kermit发送文件功能。 序列图如下&#xff1a; 3.2.1 KermitSendFile定义 class QSerialPort; class KermitSendFile : public QObject, public Kermit {Q_OBJECT public:explicit KermitSendFile(QSerialPort *serial, QObject *…

RL — 强化学习的若干技巧

RL — 强化学习技巧 目录 一、说明二、设置引用三、输入特征3.1 RL 不完全是深度学习3.2 批量归一化和辍学方法可能不适用于 RL。3.3 越大不一定越好3.4 本地 Optima四、超参数优化五、鲁棒性六、重塑奖励功能6.1 可行性研究6.2 数据预处理6.3 监测6.4 监控培训进度6.5 调音6…

计算机网络针对交换机的配置

实验 目的 交换机的基本配置&#xff0c;交换机VLAN配置 实验条件 Windows&#xff0c;Cisco packet tracer 实验 内容 交换机的基本配置&#xff0c;交换机VLAN配置 实验 过程 一、交换机的基本配置 进入特权模式 Switch>enable 进入配置模式 Switch#configure ter…

2024年阿里云新用户便宜购买云服务器攻略:5大细节助你降低购买成本

随着互联网的蓬勃发展&#xff0c;无论是个人还是企业&#xff0c;拥有一个稳定且高效的网站或APP已成为提升竞争力的关键。为了将这些项目部署并运行起来&#xff0c;购买一台实用又便宜的云服务器是必不可少的。阿里云作为国内首屈一指的云服务提供商&#xff0c;自然成为了众…