CF990G】的更多相关文章

只想出来 $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…
/* 树上莫比乌斯反演 求树上 满足 d|gcd(au,av) gcd(au,av)的对数f(d) 如何求: 建立200000层新图,即对于每个数建立一个新图 在加边时,给gcd(au,av)的约数层的图的uv加边 f[i]表示第i层的满足条件 i | gcd(a[u],a[v]) 的对数,那么求一遍并查集,在合并过程中更新f[i]即可, 同时要注意f[i]初始值为这层的有效结点数量,对应i|gcd(a[u],a[u])这样的情况 然后用莫比乌斯反演来求最后答案g[d]=sigma(u[i]*f…
题意 https://codeforces.com/contest/990/problem/G 思考 在200000以内,因数个数最多的数位166320,共有160个因数.可以知道,从一个节点向下走最多只会有160种取值. 记集合f[u]为从u节点向下走可以取得的所有值及其个数,暴力转移即可. 至于合并,博主写了平方.......但这题想造出极端数据也是困难的. 最后注意空间. 代码 #include<bits/stdc++.h> using namespace std; typedef lo…
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…
正题 题目链接:https://www.luogu.com.cn/problem/CF990G 题目大意 给出一棵有点权的树,对于每个\(k\)求有多条路径的点权\(gcd\)为\(k\) \(1\leq n\leq 2\times 10^5,1\leq a_i\leq 2\times 10^5\) 解题思路 开始以为要莫反,后来发现不用. 首先\(gcd\)之间拆倍数,设\(f_i\)表示点权都是\(i\)的倍数的路径条数,这个用一个\(vector\)存然后暴力枚举\(i\)加点每次\(df…