稀碎从零算法笔记Day46-LeetCode:互质树

这几天有点懈怠了

题型:树、DFS、BSF、数学

链接:1766. 互质树 - 力扣(LeetCode)

来源:LeetCode

题目描述

给你一个 n 个节点的树(也就是一个无环连通无向图),节点编号从 0 到 n - 1 ,且恰好有 n - 1 条边,每个节点有一个值。树的 根节点 为 0 号点。

给你一个整数数组 nums 和一个二维数组 edges 来表示这棵树。nums[i] 表示第 i 个点的值,edges[j] = [uj, vj] 表示节点 uj 和节点 vj 在树中有一条边。

当 gcd(x, y) == 1 ,我们称两个数 x 和 y 是 互质的 ,其中 gcd(x, y) 是 x 和 y 的 最大公约数 。

从节点 i 到  最短路径上的点都是节点 i 的祖先节点。一个节点 不是 它自己的祖先节点。

请你返回一个大小为 n 的数组 ans ,其中 ans[i]是离节点 i 最近的祖先节点且满足 nums[i] 和 nums[ans[i]] 是 互质的 ,如果不存在这样的祖先节点,ans[i] 为 -1 。

题目样例

示例 1:

输入:nums = [2,3,3,2], edges = [[0,1],[1,2],[1,3]]
输出:[-1,0,0,1]
解释:上图中,每个节点的值在括号中表示。
- 节点 0 没有互质祖先。
- 节点 1 只有一个祖先节点 0 。它们的值是互质的(gcd(2,3) == 1)。
- 节点 2 有两个祖先节点,分别是节点 1 和节点 0 。节点 1 的值与它的值不是互质的(gcd(3,3) == 3)但节点 0 的值是互质的(gcd(2,3) == 1),所以节点 0 是最近的符合要求的祖先节点。
- 节点 3 有两个祖先节点,分别是节点 1 和节点 0 。它与节点 1 互质(gcd(3,2) == 1),所以节点 1 是离它最近的符合要求的祖先节点。

示例 2:

输入:nums = [5,6,10,2,3,6,15], edges = [[0,1],[0,2],[1,3],[1,4],[2,5],[2,6]]
输出:[-1,0,-1,0,0,0,-1]

提示:

  • nums.length == n
  • 1 <= nums[i] <= 50
  • 1 <= n <= 105
  • edges.length == n - 1
  • edges[j].length == 2
  • 0 <= uj, vj < n
  • uj != vj

题目思路(纯看的灵茶山艾府的题解,无思路)

题目都没看懂....

C++代码

    vector<int>coprime[51];//50哥节点极限是,那就将1-50的情况都表示出来//初始化coprime数组auto init = []{for(int i = 1;i<51;i++)for(int j = 1;j<51;j++){if(gcd(i,j) == 1)//如果最大公因数为1 其中j是i的父亲{coprime[i].push_back(j);}}return 0;}();class Solution {
public:vector<vector<int>> g;vector<int>answer;//答案pair<int,int>depth_pair[51] ;//深度 编号//dfsvoid dfs(int x,int fa,int depth,vector<int> &nums){int val = nums[x];int max_depth = 0;for(int temp : coprime[val]){auto [depth,id] = depth_pair[temp];if(depth > max_depth){max_depth = depth;answer[x] = id;}}auto tmp = depth_pair[val]; depth_pair[val] = {depth,x};for(int y : g[x])if(y != fa)dfs(y,x,depth+ 1 ,nums);//递归depth_pair[val] = tmp;}vector<int> getCoprimes(vector<int>& nums, vector<vector<int>>& edges) {int n = nums.size();g.resize(n);for(auto &e : edges){int x = e[0], y = e[1];g[x].push_back(y);g[y].push_back(x);}answer.resize(n ,-1);dfs(0,-1,1,nums);return answer;}
};

结算页面

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

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

相关文章

使用Python快速模拟前端常用页面数据格式

1.模拟表格数据格式 import random data [] num_records 10 for _ in range(num_records):record {}record["name"] "Person" str(random.randint(1, 100)) # 随机生成姓名record["age"] random.randint(20, 60) # 随机生成年龄record[…

从“黑箱”到“透明”:云里物里电子标签助力汽车总装数字化转型

“汽车总装”指“汽车产品&#xff08;包括整车及总成等&#xff09;的装配”&#xff0c;是把经检验合格的数以百计、或数以千计的各种零部件按照一定的技术要求组装成整车及发动机、变速器等总成的工艺过程&#xff0c;是汽车产品制造过程中最重要的工艺环节之一。 其中&…

全量知识系统 程序详细设计 之 三种“活物” 之1(QA百度文库 2 )

前面一篇整理完之后&#xff0c;发现有些内容有问题。下面是重新就这个话题沟通的内容。 Q1. 三种 的进一步表述&#xff1a;KE “态”套件-情境演算&#xff08;“特征”Strcture::Class&#xff09;“全局global 垂直 等价” 丄<<Coreference>> (KE主目命名惯式…

算法 囚犯幸存者

题目 主类 public static List<Prisoner> prisoners new ArrayList<Prisoner>(); public static List<Prisoner> remainPrisoners new ArrayList<Prisoner>(); public static Prisoner lastPrisoner null;public static void main(String[] args) …

props组件传值(子串子)

父组件 <version :show"versionShow" closeVersion"versionShow false" data"onData"></version> <footBar url"index" :footShow"footShow"></footBar>第一个version 组件 this.$emit(data, fals…

一款自研Python解释器

项目简介: PikaScript是一个完全重写的超轻量级python引擎,具有完整的解释器,字节码和虚拟机架构,可以在少于4KB的RAM下运行,用于小资源嵌入式系统。相比同类产品,如MicroPython,LuaOS等,资源占用减少85%以上。 入选2021年度 Gitee最有价值开源项目,加入RT-Thread嵌入…

RUST语言之引用与借用

1.通过参数形式使用引用 调用函数并传入引用 //String::from会分配内存来存储RUST语言参考与借用//然后将s指针指向这块内存地址let mut s=String::from("RUST语言参考与借用");println!("{}",s);//调用自定义函数并传入引用let x= reftest(&mut s);…

vue3+ts中判断输入的值是不是经纬度格式

vue3ts中判断输入的值是不是经纬度格式 vue代码&#xff1a; <template #bdjhwz"{ record }"><a-row :gutter"8" v-show"!record.editable"><a-col :span"12"><a-input placeholder"经度" v-model:v…

linux使用docker实现redis主从复制和哨兵模式

目录 1. 拉取redis镜像 2.使用可视化redis工具 3. 设置从redis 4.设置哨兵模式 5. 使用docker-compose快速创建 1. 拉取redis镜像 docker pull redis 默认拉取最新的镜像。 然后pull结束后使用docker images检查镜像&#xff1a; 然后docker run创建container容器 首先…

速率再次翻倍!现有SSD显卡又要被强制换代了

去年 AMD Ryzen 7000 和 Intel 第 13 代 CPU 发布的同时&#xff0c;消费级的 PCI-E 5.0 平台出现在了大众视野。 这个用了快 20 年的接口虽然外形上似乎没变过、新老平台通吃&#xff0c;但其实内在已更新了好多个版本了。 和 3.0 换 4.0 一样&#xff0c;5.0、6.0 换代只是时…

C++ 函数重载歧义

当同时存在char,int类型时: #include <iostream> #include <string> #include <cstring>using namespace std;void show(int a) {cout << "int a" << endl; }void show(char a) {cout << "char a" << endl; }i…

【自研网关系列】网关的技术选型以及架构设计

&#x1f308;Yu-Gateway&#xff1a;基于 Netty 与原生 Java 实现&#xff0c;使用 Nacos 作为注册与配置中心。项目实现多种过滤器&#xff0c;包含路由、负载均衡、鉴权、灰度发布等过滤器。 &#x1f308;项目代码地址&#xff1a;GitHub - YYYUUU42/YuGateway-master 如果…

142. 环形链表 II(快慢指针)

给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数…

【Linux】进程间通信——system V版本 共享内存

目录 共享内存 原理 实践 shmget() 创建共享内存 shmctl() 删除共享内存 shmat() 挂接进程和共享内存 shmt() 进程和共享内存去关联 共享内存的特性 优势 劣势 用共享内存实现进程间通信 共享内存 原理 两个进程的PCB各自维护着一个进程地址空间。当两个进…

Linux的学习之路:8、Linux调试器-gdb使用

摘要 本章主要是说一下gdb的使用&#xff0c;以及把使用指令放入放个指令手册。 目录 摘要 一、背景 二、使用 1、产生debug文件 2、进入gdb 3、使用指令 三、思维导图 一、背景 Linux调试器gdb的背景主要涉及到Linux程序发布方式和调试需求。 在Linux中&#xff0c…

SpringBoot学习笔记二

SpringBoot学习笔记二 1.SpringBoot配置加载顺序1.1 内部配置加载顺序1.2 外部配置加载顺序 2. SpringBoot整合其他框架2.1 SpringBoot整合Test2.2 SpringBoot整合Redis 1.SpringBoot配置加载顺序 1.1 内部配置加载顺序 同理可知&#xff0c;父项目中的confg下的配置优先级最…

Impala Catalogd启动报错NoClassDefFoundError: org.apache.hadoop.fs.FileSystem

开端 今天在部署Impala时遇到一个NoClassDefFoundError的错误&#xff0c;本以为只是CLASSPATH的小问题&#xff0c;没想到调查了一天…… 事情是这样的&#xff0c;编译Impala生成RPM&#xff0c;部署到另一台机器上后&#xff0c;statestored能正常启动&#xff0c;catalog…

二分法查找左右边界(含代码模板)

问题1&#xff1a;使用mid left(right-left)/2 或者 mid (leftright)/2,两者计算结果相同吗&#xff1f; 在大多数情况下是等价的。 mid left (right - left) / 2&#xff1a;先计算了区间长度&#xff0c;然后再除以2。 这种方式可以避免整数溢出问题&#xff0c;因为它…

探索Java中的栈:Stack与Deque(ArrayDeque和LinkedList)

文章目录 1. 栈&#xff08;Stack&#xff09;1.1 定义方式1.2 特点1.3 栈的层次结构 2. 双端队列&#xff08;Deque&#xff09;2.1 定义方式及继承关系2.2 特点&#xff1a;2.3 ArrayDeque2.4 LinkedList2.5 Deque 的各种方法2.6 如何选择ArrayDeque和LinkedList 3. 如何选择…

冶炼金属(蓝桥杯)

文章目录 冶炼金属题目描述二分查找难点解释 冶炼金属 题目描述 小蓝有一个神奇的炉子用于将普通金属 O冶炼成为一种特殊金属 X。这个炉子有一个称作转换率的属性 V&#xff0c;V 是一个正整数&#xff0c;这意味着消耗 V个普通金属 O 恰好可以冶炼出一个特殊金属 X&#xff…