CF990G-GCD Counting【dfs】
正题
题目链接: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\)加点每次\(dfs\)出每个联通块的大小就好了。
之后倒序枚举\(i\),再枚举它的倍数\(ik\),然后\(f_i-=f_{ik}\),这样就自动容斥,用不上莫比乌斯反演了。
时间复杂度\(O(\sum_{i=1}^n\sigma_0(a_i)+n\log n)\)
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#define ll long long
using namespace std;
const ll N=2e5+10;
ll n,w[N],v[N],f[N];
vector<ll> p[N],G[N];
//void Prime(){
// mu[1]=1;
// for(ll i=2;i<N;i++){
// if(!v[i])v[i]=1,pri[++cnt]=i,mu[i]=-1;
// for(ll j=1;j<=cnt&&i*pri[j]<N;j++){
// v[i*pri[j]]=1;
// if(i%pri[j]==0)break;
// mu[i*pri[j]]=-mu[i];
// }
// }
// return;
//}
ll Add(ll x,ll fa,ll k){
v[x]=k;ll siz=0;
for(ll i=0;i<G[x].size();i++){
ll y=G[x][i];
if(y==fa||w[y]%k)continue;
siz+=Add(y,x,k);
}
return siz+1;
}
signed main()
{
scanf("%lld",&n);
for(ll i=1;i<=n;i++){
scanf("%lld",&w[i]);
p[w[i]].push_back(i);
}
for(ll i=1;i<n;i++){
ll x,y;
scanf("%lld%lld",&x,&y);
G[x].push_back(y);
G[y].push_back(x);
}
for(ll i=1;i<=2e5;i++)
for(ll j=i;j<=2e5;j+=i)
for(ll k=0;k<p[j].size();k++){
ll x=p[j][k];
if(v[x]==i)continue;
ll siz=Add(x,x,i);
f[i]+=siz*(siz+1)/2;
}
for(ll i=2e5;i>=1;i--)
for(ll j=2*i;j<=2e5;j+=i)
f[i]-=f[j];
for(ll i=1;i<=2e5;i++)
if(f[i])printf("%lld %lld\n",i,f[i]);
return 0;
}
CF990G-GCD Counting【dfs】的更多相关文章
- POJ2386 Lake Counting 【DFS】
Lake Counting Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20782 Accepted: 10473 D ...
- 【第40套模拟题】【noip2011_mayan】解题报告【map】【数论】【dfs】
目录:1.潜伏者 [map] 2.Hankson的趣味题[数论]3.mayan游戏[dfs] 题目: 1. 潜伏者(spy.pas/c/cpp)[问题描述]R 国和S 国正陷入战火之中,双方都互派间谍 ...
- Kattis - glitchbot 【DFS】
Kattis - glitchbot [DFS] 题意 有一个机器人 刚开始在(0, 0),然后给出一个目标点,并且会给出一系列指令,但是其中会有一个指令是错误的.我们需要找出那个指令,并且改成正确的 ...
- HDU 6113 度度熊的01世界 【DFS】(2017"百度之星"程序设计大赛 - 初赛(A))
度度熊的01世界 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- 【dfs】P1331 海战
题目描述 在峰会期间,武装部队得处于高度戒备.警察将监视每一条大街,军队将保卫建筑物,领空将布满了F-2003飞机.此外,巡洋船只和舰队将被派去保护海岸线.不幸的是因为种种原因,国防海军部仅有很少的几 ...
- 【dfs】p1731 生日蛋糕
1441:[例题2]生日蛋搞 [题目描述] 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体.设从下往上数第i(1≤i≤M)层蛋糕是半径为Ri, 高 ...
- 【dfs】LETTERS
1212:LETTERS [题目描述] 给出一个roe×colroe×col的大写字母矩阵,一开始的位置为左上角,你可以向上下左右四个方向移动,并且不能移向曾经经过的字母.问最多可以经过几个字母. [ ...
- 洛谷P1605 迷宫【dfs】
题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...
- 【dfs】BZOJ1703-[Usaco2007 Mar]Ranking the Cows 奶牛排名
[题目大意] 农夫约翰有N(1≤N≤1000)头奶牛,每一头奶牛都有一个确定的独一无二的正整数产奶率.约翰想要让这些奶牛按产奶率从高到低排序,约翰已经比较了M(1≤M≤10000)对奶牛的产奶率,但他 ...
随机推荐
- WPF学习笔记二 依赖属性实现原理及性能分析
在这里讨论依赖属性实现原理,目的只是学习WPF是怎么设计依赖属性的,同时更好的使用依赖属性. 首先我们来思考一个简单的问题:我们希望能验证属性的值是否有效,属性变更时进行自己的处理.回顾一下.net的 ...
- java中jre\bin目录和jdk\bin目录下的工具功能介绍
转自:https://blog.csdn.net/eclipse_yin/article/details/51051096 jre/bin目录下面工具说明 javac:Java编译器,将Java源代码 ...
- C#设计模式---观察者模式(Observer Pattern)
一.目的 提供一种一对多的关系,当主题发生变化时候,可以通知所有关联的对象. 二.定义 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通 ...
- java 搞笑注释
// _ooOoo_ // o8888888o // 88" . "88 // (| -_- |) // O\ = /O // ____/`---'\____ // . ' \\| ...
- springcloud starter(一)
Spring Cloud - Getting Started Example, 转载自:https://www.logicbig.com/tutorials/spring-framework/spri ...
- 深入研究webpack之Tree Shaking相关属性sideEffects用处
Tree Shaking我原来也只是了解,这次碰巧深入研究了下,就写个博客记录一下,网上有很多讲Tree Shaking的,我写的这篇跟他们侧重点不一样 Tree Shaking相关的基础知识 1 w ...
- opencv入门系列教学(七)改变颜色空间、提取彩色对象
0.序言 之前的博客里我们介绍了opencv在图像上的基本操作,下面我们来进行稍微深入一点的介绍,从这里开始我们可以发现opencv库能给我们带来的更多更有趣的功能.从现在开始,我们将逐步深入了解 ...
- 三大操作系统对比使用之·Ubuntu16.04
时间:2018-11-13 整理:byzqy 本篇是一篇个人对 Ubuntu 16.04(桌面版)使用方法.技巧以及应用推荐的文章,以便查询和分享! 打开终端: Ctrl+Alt+T,即可打开&quo ...
- IMO 2021 第 1 题拓展问题的两个极值的编程求解
IMO 2021 第 1 题拓展问题的两个极值的编程求解 本篇是 IMO 2021 第一题题解及相关拓展问题分析 的续篇. 拓展问题三: (I). 求 n 的最小值,使得 n, n + 1, ..., ...
- 记录Mac下使用Charles抓包
抓包 简述 在网络应用如后端系统,app,小程序等的开发过程中,免不了接口可能会报错,但是一般在app中或者小程序中没有便捷的console控制台,而且线上环境也不会开启调试模式,所以想看一下接口的响 ...