CF1101D GCD Counting】的更多相关文章

题目地址:CF1101D GCD Counting zz的我比赛时以为是树剖或者点分治然后果断放弃了 这道题不能顺着做,而应该从答案入手反着想 由于一个数的质因子实在太少了,因此首先找到每个点的点权的所有质因子 进行一次树形dp,每次更新暴力枚举所有质因子即可 代码: #include <bits/stdc++.h> using namespace std; const int N = 200006; int n, ans = 1; vector<int> p[N], c[N],…
几个月的坑终于补了…… 题目链接:CF原网  洛谷 题目大意:一棵 $n$ 个点的树,每个点有点权 $a_i$.一条路径的长度定义为该路径经过的点数.一条路径的权值定义为该路径经过所有点的点权的 GCD.问所有权值不为 $1$ 的路径中,最长的长度. $1\le n\le 2\times 10^5,1\le a_i\le 2\times 10^5$. 我可能是数据结构学傻了,一眼点分治……然后复杂度又不对…… 正解:我们发现只要 $\gcd$ 不为 $1$ 就行了,而两个数的 $\gcd$ 不为…
题意:求最长的树上路径点值的 $gcd$ 不为 $1$ 的长度. 由于只要求 $gcd$ 不为一,所以只要 $gcd$ 是一个大于等于 $2$ 的质数的倍数就可以了. 而我们发现 $2\times 10^5$ 以内的数最多只会有 $7$~$8$ 个本质不同的质因子,所以我们在点分治的时候暴力拆质因子并维护一些桶即可. #include <cstdio> #include <vector> #include <algorithm> #define N 200004 #de…
G - GCD Counting 思路:我猜测了一下gcd的个数不会很多,然后我就用dfs回溯的时候用map暴力合并就好啦. 终判被卡了MLE.....  需要每次清空一下子树的map... #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define pii pair<int,int> #define piii pair<…
CF EDU 1101D GCD Counting 题意 有一颗树,每个节点有一个值,问树上最长链的长度,要求链上的每个节点的GCD值大于1. 思路 由于每个数的质因子很少,题目的数据200000<2*3*5*7*11*13*17=510510.所以每个节点的质因子个数不多.那么树形DP的时候直接枚举每种因子即可. //#pragma GCC optimize(3) //#pragma comment(linker, "/STACK:102400000,102400000") /…
You are given a tree consisting of n vertices. A number is written on each vertex; the number on vertex i is equal to ai . Let's denote the function g(x,y) as the greatest common divisor of the numbers written on the vertices belonging to the simple…
题目链接:http://codeforces.com/contest/1101/problem/D 题目大意:给你n个点,每个点都有权值,然后给你边的关系,问你树上的最大距离.(这里的最大距离指的是这条路径上的所有数最大gcd>1).  具体思路:首先,我们可以找出对于一个父亲节点,他和子节点能够在不是互素的前提下,对于他们每一个因子的个数. 然后我们先dfs到底部,然后看他的每一个子节点之间产生的最大公因数是不是1,如果不是的话,我们就求这条路径上的最大值,在求最大值的时候,我们还是按照树的结…
You are given a tree consisting of nn vertices. A number is written on each vertex; the number on vertex ii is equal to aiai. Let's denote the function g(x,y)g(x,y) as the greatest common divisor of the numbers written on the vertices belonging to th…
https://www.luogu.org/problemnew/show/CF990G 耶,又一道好题被我浪费掉了,不会做.. 显然可以反演,在这之前只需对于每个i,统计出有多少(x,y),满足x到y简单路径上所有点权值都是i的倍数即可 方法1: 可以发现,对于给定的i,这样的“权值是i的倍数”的点一定可以构成一些连通块,每个连通块内部的点两两符合条件,且不会出现跨连通块的合法点对 自己的做法: 那么,搞2*10^5个动态开点的并查集,对于每条边(u,v),枚举所有a[u]和a[v]的公因子i…
题目分析: 蛮简单的一道题,对于每个数拆质因子,对于每个质因子找出最长链,在每个地方枚举一下拼接 代码: #include<bits/stdc++.h> using namespace std; ; int n,a[maxn],prime[maxn],flag[maxn],minn[maxn],num,ans; vector <int> g[maxn]; vector <pair<int,int> > mp[maxn]; vector<int>…
题意 #include<bits/stdc++.h> #define t 200000 #define MAXN 200100 using namespace std; int n; int fa[MAXN],fa1[MAXN]; long long ans[MAXN],size[MAXN]; vector <int> e[MAXN],Edge[MAXN]; int find(int x){ if (x==fa1[x]) return fa1[x]; else return fa1…
Discription You are given a tree consisting of nn vertices. A number is written on each vertex; the number on vertex ii is equal to aiai. Let's denote the function g(x,y)g(x,y) as the greatest common divisor of the numbers written on the vertices bel…
只想出来 $O(nlogn\times 160)$ 的复杂度,没想到还能过~ Code: #include <cstdio> #include <vector> #include <algorithm> #define N 200004 #define ll long long #define setIO(s) freopen(s".in","r",stdin) using namespace std; int n; vector…
一.树形 DP 基础 又是一篇鸽了好久的文章--以下面这道题为例,介绍一下树形 DP 的一般过程. POJ 2342 Anniversary party 题目大意:有一家公司要举行一个聚会,一共有 \(n\) 个员工,其中上下级的关系通过树形给出.每个人都不想与自己的直接上级同时参加聚会.每个员工都有一个欢乐度,举办聚会的你需要确定邀请的员工集合,使得它们的欢乐度之和最大,并且没有一个受邀的员工需要与他的直接上级共同参加聚会.\(n\leq 6000\). Solution: 考虑一个子树往上转…
GCD Counting 思路: 预处理  每个权值的素因子.问题转化为  以同一个素数作为因子 最长的链, 树形DP求解,ans 由 此点的 最长子链 + 次长子链 相加得到, 然后再更新最长子链 #include<bits/stdc++.h> using namespace std; #define maxn 234567 int pri[maxn+10],n,a[maxn+10]; int x,y,dp[maxn+10][30],id,ans; int head[maxn+10],cnt…
A. Minimum Integer 链接:http://codeforces.com/contest/1101/problem/A 代码: #include<bits/stdc++.h> using namespace std; #define ll long long int main() { int n,x,y,d; cin >> n; ;i <= n;i ++){ cin>>x>>y>>d; if(x > d) cout<…
D. GCD Counting 题意: 给出n个点的树,每个点有一个权值,找出一条最长的路径使得路径上所有的点的gcd>1 题解: gcd>1的一定不会有很多.所以暴力搞一下就行,不需要点分治. #include <cstdio> #include <algorithm> #include <iostream> #include <cstring> #include <map> using namespace std; ; *maxn…
目录 Educational Codeforces Round 58 (Rated for Div. 2) A. Minimum Integer B. Accordion C. Division and Union D.GCD Counting E.Polycarp's New Job F.Trucks and Cities G.(Zero XOR Subset)-less A,B,C,D,E都是几个月前写的..现在终于把这个坑填上了qwwwwq Educational Codeforces R…
目录 Codeforces 990 A.Commentary Boxes B.Micro-World C.Bracket Sequences Concatenation Problem D.Graph And Its Complement(思路 构造) E.Post Lamps(贪心) F.Flow Control(思路) G.GCD Counting(思路) Codeforces 990 比赛链接 真特么菜啊 后一个多小时无所事事.. 要多做CF的题啊,也许没有那么难但是就是容易想不到,代码也…
A. Minimum Integer 签到. #include <bits/stdc++.h> using namespace std; #define ll long long ll l, r, d; int main() { int t; scanf("%d", &t); while (t--) { scanf("%lld%lld%lld", &l, &r, &d); if (d < l) printf(&quo…
既然补了就简单记录一下. 感觉还算有一点营养. 官方题解传送门:点我 A Commentary Boxes 对拆掉$n \mod m$个和新建$m - (n \mod m)$求个最小. #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long ll; int main() { ll n, m, a, b, r; scanf("…
A. Minimum Integer 水 #include<bits/stdc++.h> #define clr(a,b) memset(a,b,sizeof(a)) using namespace std; typedef long long ll; ; struct node{ ll num,mag; friend bool operator <(const node &a,const node &b){ return a.mag>b.mag; } }a[max…
Educational Codeforces Round 58 (Rated for Div. 2)  题目总链接:https://codeforces.com/contest/1101 A. Minimum Integer 题意: 多组数据,给你三个数l,r,d,要求在区间[l,r]之外找一个最小的x,使得x%d==0. 题解: 当d<l or d>r的时候,直接输出d就好了. 当l<=d<=r的时候,找到最小的t,使得t*d>r就行了. 具体操作见代码: #include…
动态规划 \(dp\)早就已经是经常用到的算法了,于是老师上课主要都在讲题.今天讲的主要是三类\(dp\):树形\(dp\),计数\(dp\),\(dp\)套\(dp\).其中计数\(dp\)是我很不熟的,\(dp\)套\(dp\)是我没接触过,树形\(dp\)难的题我也不是很会做,所以感觉还是收获了不少,于是\(dp\)的总结将主要会以题解的形式呈现. 重要例题及简要题解 \(Gcd\ counting\):设\(f_{u,v}\)代表以\(u\)为根的子树中,点权都能被\(v\)整除的最长链…
A. Minimum Integer 如果\(d < l\),则\(d\)满足条件 否则,输出\(d * (r / d + 1)\)即可. #include <cstdio> #include <iostream> using namespace std; int main(){ int T; scanf("%d", &T); while(T--){ int l, r, d; scanf("%d%d%d", &l, &a…
一.简介 GCD 的全称是 Grand Centre Dispatch 是一个强大的任务编程管理工具.通过GCD你可以同步或者异步地执行block.function. 二.dispatch Queue - 队列 queue是指先进先出的列表,是blocks的执行环境.这个环境可以是单线程的也可以使多线程这个取决于你创建的queue类型.如果是serial queue(串行队列)队列的话,queue内部是以单线程运行.被添加进去的blocks,按照它们被添加进去的顺序串行地执行. 如果是concu…
GCD Array Time Limit: 11000/5500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 843    Accepted Submission(s): 205 Problem Description Teacher Mai finds that many problems about arithmetic function can be reduced to…
题目链接:12075 - Counting Triangles 题意:求n * m矩形内,最多能组成几个三角形 这题和UVA 1393类似,把总情况扣去三点共线情况,那么问题转化为求三点共线的情况,对于两点,求他们的gcd - 1,得到的就是他们之间有多少个点,那么情况数就能够求了,然后还是利用容斥原理去计数,然后累加出答案 代码: #include <stdio.h> #include <string.h> #include <algorithm> using nam…
Consider the fraction, n/d, where n and d are positive integers. If nd and HCF(n,d)=1, it is called a reduced proper fraction. If we list the set of reduced proper fractions for d  8 in ascending order of size, we get: 1/8, 1/7, 1/6, 1/5, 1/4, 2/7, 1…
Consider the fraction, n/d, where n and d are positive integers. If nd and HCF(n,d)=1, it is called a reduced proper fraction. If we list the set of reduced proper fractions for d  8 in ascending order of size, we get: 1/8, 1/7, 1/6, 1/5, 1/4, 2/7, 1…