正题

题目链接:https://www.luogu.com.cn/problem/CF990G


题目大意

给出一棵有点权的树,对于每个kkk求有多条路径的点权gcdgcdgcd为kkk

1≤n≤2×105,1≤ai≤2×1051\leq n\leq 2\times 10^5,1\leq a_i\leq 2\times 10^51≤n≤2×105,1≤ai​≤2×105


解题思路

开始以为要莫反,后来发现不用。

首先gcdgcdgcd之间拆倍数,设fif_ifi​表示点权都是iii的倍数的路径条数,这个用一个vectorvectorvector存然后暴力枚举iii加点每次dfsdfsdfs出每个联通块的大小就好了。

之后倒序枚举iii,再枚举它的倍数ikikik,然后fi−=fikf_i-=f_{ik}fi​−=fik​,这样就自动容斥,用不上莫比乌斯反演了。

时间复杂度O(∑i=1nσ0(ai)+nlog⁡n)O(\sum_{i=1}^n\sigma_0(a_i)+n\log n)O(∑i=1n​σ0​(ai​)+nlogn)


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】相关推荐

  1. NUC1158 Lake Counting【DFS】

    Lake Counting 时间限制: 1000ms 内存限制: 65536KB 通过次数: 1总提交次数: 1 问题描述 Due to recent rains, water has pooled ...

  2. Bailian2815 城堡问题【DFS】

    2815:城堡问题 总时间限制: 1000ms 内存限制: 65536kB 描述 1 2 3 4 5 6 7 ############################# 1 # | # | # | | ...

  3. Bailian2816 红与黑【DFS】

    2816:红与黑 总时间限制: 1000ms 内存限制: 65536kB 描述 有一间长方形的房子,地上铺了红色.黑色两种颜色的正方形瓷砖.你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动.请写一 ...

  4. NUC1399 Sum It Up【DFS】

    Sum It Up 时间限制: 1000ms 内存限制: 65535KB 通过次数: 1总提交次数: 1 问题描述 Given a specified total t and a list of n ...

  5. HDU1181 变形课【DFS】(废除)

    新题解参见:HDU1181 变形课[DFS+关系闭包+bitset] 变形课 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 13107 ...

  6. 【DFS】巧妙取量的倒油问题

    题目描述 [题目描述]  有三个容器,容量分别为 a,b,c(a> b > c ),一开始a装满油,现在问是否只靠abc三个容器量出k升油.如果能就输出"yes",并且 ...

  7. [kuangbin]专题三 Dancing Links Squiggly Sudoku HDU - 4069【DFS】【精确覆盖】

    [题目描述] Today we play a squiggly sudoku, The objective is to fill a 9*9 grid with digits so that each ...

  8. 【DFS】不撞南墙不回头—深度优先搜索算法[Deep First Search]

    今天上午听到,那个非常6+1的李咏先生因癌症去世 DFS算法的基本模型 深度下,不撞南墙不回头,就是一直往后找,知道没有路了,向后返回. 想起一首民谣,<可能否>--木小雅 https:/ ...

  9. CF990G GCD Counting(树上莫比乌斯反演,分层图,并查集)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Problem 给定一棵点带权无根树,对于每个 k∈[1,2×105]k\in[1,2\times10 ...

最新文章

  1. html自动移动滚动条,css隐藏移动端滚动条并平滑滚动
  2. Python金融大数据分析——第四章数据类型和结构
  3. oracle 如何数组变成表,Oracle从零开始19——表的管理09——嵌套表和可变数组
  4. ClassLoader的常用方法及获取方法
  5. 线路速度之实战***
  6. 【复习】软考中级_软件设计师(2021)__上午
  7. 机器学习项目实践总结 -- 24个机器学习最佳入门项目(附源代码)
  8. SOLIDWORKS之VBA宏(三)
  9. Windows本地认证
  10. linux 提升管理员权限命令,​cmd怎么用命令直接提升到管理员权限|cmd原有权限提升方法...
  11. SpringCloud学习(一) SpringCloud 基础介绍
  12. db2 前滚数据库_db2 前滚会话
  13. OPENWRT---SWITCH设置
  14. 收集的JS常用正则表达式等
  15. 使用php实现自动获取一个获取文章标题生成主题关键词功能源码
  16. translate,transform和transition的区别与联系
  17. 期权希腊字母更多的含义和解释
  18. ESP32 (WIFI)-AP、STA模式(14)
  19. 什么是SPOOLing?
  20. LightGBM: A Highly Efficient Gradient Boosting Decision Tree

热门文章

  1. idea zookeeper的使用_学习ZooKeeper源码,就从这篇开始吧
  2. python时间函数报错_Python Day11-LEGB-global-时间函数
  3. 超详细图解!【MySQL进阶篇】MySQL架构原理
  4. c语言分配多一个字符空间,关于C语言动态给字符串分配内存空间问题
  5. 信号转化java_Java基础知识回顾-7
  6. python功能函数_Python-功能函数的使用
  7. 数据结构——最小生成树之克鲁斯卡尔算法(Kruskal)
  8. [C++11]函数模板的默认模板参数
  9. [PAT乙级]1006 换个格式输出整数
  10. 二叉树的遍历(算法导论第三版12.1-4)(包含先序遍历,后序遍历和中序遍历)