1766. 互质树

2024-04-18 17:44
文章标签 互质 1766

本文主要是介绍1766. 互质树,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1766. 互质树


题目链接:1766. 互质树

代码如下:

//深度优先搜索
//参考leetcode官方题解
class Solution {
public:void dfs(vector<int>& nums,int x,int depth){dep[x]=depth;for(int val:gcds[nums[x]]){if(tmp[val].empty()){continue;}int las=tmp[val].back();if(ans[x]==-1||dep[las]>dep[ans[x]]){ans[x]=las;}}tmp[nums[x]].push_back(x);for(int val:g[x]){if(dep[val]==-1)//被访问的dep不为-1{dfs(nums,val,depth+1);}}tmp[nums[x]].pop_back();}vector<int> getCoprimes(vector<int>& nums, vector<vector<int>>& edges) {//初始化gcds.resize(mx);tmp.resize(mx);ans.resize(nums.size(),-1);dep.resize(nums.size(),-1);g.resize(nums.size());for(int i=1;i<mx;i++){for(int j=1;j<mx;j++){if(gcd(i,j)==1){gcds[i].push_back(j);}}}for(const auto& val:edges){g[val[0]].push_back(val[1]);g[val[1]].push_back(val[0]);}dfs(nums,0,1);return ans;}
private:vector<vector<int>> gcds;vector<vector<int>> tmp;vector<vector<int>> g;vector<int> dep;vector<int> ans;const int mx=51;
};

这篇关于1766. 互质树的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/915456

相关文章

C++质数的那些事(判断指数、区间筛质数、互质等等)

质数的定义:若一个正整数除了1和它自身之外不能被任何自然数整除,则该数称为质数,也叫素数。否则为合数。 质数的性质:质数的分布较为稀疏,对于一个足够大的数S,不超过S的质数大约有个,也就是说每InN个数约有一个质数, 一、判断一个整数是否是指数 代码: #include<iostream>using namespace std;//判断传入整数是否为质数的自定义函数bool isprim

算法提高之分成互质组

算法提高之分成互质组 核心思想:dfs 枚举每一组可以放哪些元素 #include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 10;int n;int a[N];int g[N][N];int ans = N;bool st[N];int gcd(int a,int

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

这几天有点懈怠了 题型:树、DFS、BSF、数学 链接:1766. 互质树 - 力扣(LeetCode) 来源:LeetCode 题目描述 给你一个 n 个节点的树(也就是一个无环连通无向图),节点编号从 0 到 n - 1 ,且恰好有 n - 1 条边,每个节点有一个值。树的 根节点 为 0 号点。 给你一个整数数组 nums 和一个二维数组 edges 来表示这棵树。nums[i]

分成互质组(dfs)题解

题目描述: 题目分析: 判断题意大体思路是使用dfs进行深度搜索 1、创建一个分组的数组v 2、对每组进行匹配,如果这个深度的数字符合条件,就将其丢进去,然后回溯。 3、如果没有一组能够符合条件,就将这个数字丢进下一组,并新开一组。 代码: #include<bits/stdc++.h>typedef long long ll;using namespace std;int n

leetcode 1766

leetcode 1766 题目 例子 思路 将边的关系,转化为树结构。 记录val 对应的id 列表。 记录是否遍历过节点。 记录id 和对应的深度。 使用dfs, 从根开始遍历。 代码实现 class Solution {private:vector<vector<int>> gcds;//val : the id of nodes matching the val v

深搜+回溯,LeetCode 1766. 互质树

一、题目 1、题目描述 给你一个 n 个节点的树(也就是一个无环连通无向图),节点编号从 0 到 n - 1 ,且恰好有 n - 1 条边,每个节点有一个值。树的 根节点 为 0 号点。 给你一个整数数组 nums 和一个二维数组 edges 来表示这棵树。nums[i] 表示第 i 个点的值,edges[j] = [uj, vj] 表示节点 uj 和节点 vj 在树中有一条边。 当 gcd

欧拉函数确定1-n有多少个数和 n 互质详解 附C语言代码 蓝桥杯互质数的个数

唯一分解定理 任意一个大于 1 的正整数都能被唯一地分解为质因数的乘积。 例如 8 = 2*2*2, 171 = 3*3*19, 30 = 2*3*5, 19 = 19。注意1既不是质数也不是合数。 为什么判断一个数是否是质数只要判断2-√n中有没有因数 24可以分解成 4*6,或者3*8,这两对因数中都是一个小于24的平方根,另一个大于,不可能两个数都小或者两个数都大,因此如果2-√n

hdu 5135 Co-prime(求m以内与n互质的个数)

文章目录 题目链接: 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4135 如果是求某一个n互质的个数的话,那确实是这样容斥比较好 原理也感觉比较简单,要找与n互质那就是要找,那就减去不互质的个数不就行了,于是就把n的质因子找出来,那么质因子的倍数就肯定与n不互质,然后就容斥。 容斥有dfs,和位运算枚举出来,而今天学到了一个

poj2891 中国剩余定理不互质

Elina is reading a book written by Rujia Liu, which introduces a strange way to express non-negative integers. The way is described as following:   Choose k different positive integers a1, a2, …, ak

容斥原理(有求区间(1-r)里面跟n互质的个数的高效方面模板)

容斥原理 编辑 在计数时,必须注意没有重复,没有遗漏。为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理。[1] 中文名 容斥原理 外文名 Principle of inclusion-exclusion[2