Puzzled Elena


.
.
题意:给定一棵树,1为根节点,问每个节点的子树有多少个与他互质的数。
.
.
解法:DFS序加容斥原理(莫比乌斯),DFS时用一个全局数组记录,count[i] 表示到当前结点能被i整除的有多少个数,由于可以保证每个数的因数不会超过6个,所以是n*2^6的,然后就是容斥原理了,对于奇偶的不同组合进行不同的操作,第一次遍历到当前结点把容斥的值减掉,然后遍历完它的子树再把容斥的值加上就好了,这就相当于作差求出子树的 count[] 。注意题目有个坑,一个节点的子树包含自己,所以如果是1的话要加一。
.
.

#include <map>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>const int maxn = 150000;
const int maxm = 3000000;
bool flag[maxn] = {0};
int prime[maxn] = {0}, n, m, _x, _y, mu[maxn] = {0}, count[maxn];
int tar[maxm], next[maxm], last[maxn], tot, val[maxn];
int ans[maxn];
std::map<int, int> f[maxn];void init() {memset(flag, 0, sizeof(flag));memset(mu, 0, sizeof(mu));mu[1] = 1;for (int i = 2; i < maxn; i++) {if (!flag[i]) {prime[++prime[0]] = i;mu[i] = -1;}for (int j = 1; j <= prime[0] && i*prime[j] < maxn; j++) {flag[i*prime[j]] = true;if (i%prime[j] == 0) {mu[i*prime[j]] = 0;break;} else {mu[i*prime[j]] = -mu[i];}}}
}void insert(int x, int y) {tot++;tar[tot] = y;next[tot] = last[x];last[x] = tot;
}void dfs(int x, int pre) {f[x].clear();int temp = val[x];int a[15] = {0};for (int i = 1; i <= prime[0] && prime[i]*prime[i] <= temp; i++) if (temp%prime[i] == 0) {a[++a[0]] = prime[i];   while (temp%prime[i] == 0) temp /= prime[i];}if (temp > 1) a[++a[0]] = temp;for (int i = 0; i <= (1 << a[0])-1; i++) {int t = 1;for (int j = 1; j <= a[0]; j++) if ((i >> (j-1)) & 1) t = t*a[j];count[t]++;ans[x] = ans[x]-mu[t]*count[t];}int k = last[x];while (k != 0) {if (tar[k] == pre) {k = next[k];continue;}dfs(tar[k], x);k = next[k];}for (int i = 0; i <= (1 << a[0])-1; i++) {int t = 1;for (int j = 1; j <= a[0]; j++) if ((i >> (j-1)) & 1) t = t*a[j];ans[x] = ans[x]+mu[t]*count[t];}if (val[x] == 1) ans[x] = ans[x]+1;
}int main() {init();int cases = 0;while (scanf("%d", &n) != EOF) {memset(last, 0, sizeof(last));memset(ans, 0, sizeof(ans));memset(count, 0, sizeof(count));tot = 0;for (int i = 1; i < n; i++) {scanf("%d %d", &_x, &_y);insert(_x, _y);insert(_y, _x);}for (int i = 1; i <= n; i++) scanf("%d", &val[i]);dfs(1, 0);printf("Case #%d:", ++cases);for (int i = 1; i <= n; i++) {printf(" %d", ans[i]);}printf("\n");}}

Puzzled Elena相关推荐

  1. hdu5468 Puzzled Elena

    hdu5468 Puzzled Elena 题意 求一棵子树内与它互质的点个数 解法 容斥 我们先求出与它不互质的数的个数,再用总数减去就好. #include <cstdio> #inc ...

  2. hdu 5468 Puzzled Elena(前缀性质+dfs序+容斥)

    题目链接:hdu 5468 Puzzled Elena 解题思路 预处理出每个数的因子(注意只需要质因子幂数最大为1的数,例如6=21∗316=2^1 * 3^1)然后用一个数组维护,fac[i]表示 ...

  3. 【HDU】5468 Puzzled Elena

    Puzzled Elena 题目链接 Puzzled Elena 题目大意 给你一棵树,n个节点n-1条边,每个节点都有一个权值.现在让你求每个节点的子树下面有多少个节点与该节点互质. 题解 容斥原理 ...

  4. hdu5468 Puzzled Elena(容斥 莫比乌斯反演)

    hdu5468 Puzzled Elena 题意 求一棵子树内与它互质的点个数 解法 容斥 我们先求出与它不互质的数的个数,再用总数减去就好. #include <cstdio> #inc ...

  5. 【HDU - 5468】Puzzled Elena(容斥原理,dfs序,数学,素因子分解,有坑)

    题干: Problem Description Since both Stefan and Damon fell in love with Elena, and it was really diffi ...

  6. hdu5468 Puzzled Elena(容斥原理+dfs序)

    hdu5468 题目 给一棵树,每个结点有一个值,现在求以每个结点为根的子树中与其互质的结点的个数 思路 这位博主讲的很好http://www.cnblogs.com/program-ccc/p/58 ...

  7. hdu5468 A Puzzled Elena (容斥原理)

    题意:给定一棵树,求这个节点的所有子树与它互质的节点(包括他本身)的个数. http://acm.hdu.edu.cn/showproblem.php?pid=5468 #include<ios ...

  8. HDU 5468 Puzzled Elena(2015 ACM/ICPC Asia Regional Shanghai Online)

    题目大意 这道题要求出每个节点与其子树节点中有多少个节点互质,题目是这样,但是如果你认为真的是这样那就错了,因为有可能根节点是1,那么1与本身也是互质的!!其实我真的搞不懂,说好了与子树互质为什么就把 ...

  9. hdu 5468 Puzzled Elena

    一颗大小为(n<=100000) 的树,根为1,每个节点有个权值.问:每个节点 和 以这个节点为根的子树中 有多少权值和根的权值互质. 做法,我们首先要明白一个东西,就是当你已经知道了k个数,并 ...

最新文章

  1. svn文件夹不显示绿色勾的解决方法
  2. Simulink仿真教程2---一些基本操作
  3. 这一次彻底搞懂 Git Rebase
  4. Forefront TMG2010中文版安装体验
  5. Mybatis Plus——AutoGenerator配置BaseResultMap(通用查询映射结果)和BaseColumnList(通用查询结果列)自动生成
  6. iOS学习笔记19 地图(一)定位CoreLocation
  7. android 卡片旋转动画,Android 卡片翻转效果
  8. 2 文件处理、权限管理、搜索
  9. c 语言从文件中读取字符串数组,C从文本文件读取到数组/字符串
  10. CHSBO2018游记
  11. [转载] python hex转字符串_Python hexstring-list-str之间的转换方法
  12. 立创开源 | 基于lm393的模数温度传感器
  13. k2p 官方固件纯净版
  14. SCM供应链管理系统实施困难及解决方案
  15. 【汇编程序】实现判断输入的年份是否为闰年
  16. 为什么微信无法打开html文件,微信网页版打不开怎么办?微信网页版无法打开的解决方法...
  17. 拉格朗日插值法(理论详解)
  18. 八:Webpack的加载器
  19. 大数据用户画像方法与实践(干货 转帖)
  20. 联想新计算机开机黑屏,联想笔记本电脑开机黑屏没反应的原因及解决办法攻略【维修总结】...

热门文章

  1. iCloud出现登录不了的情况、网络连接错误
  2. 未来网页设计的流行趋势是什么
  3. 走近腾讯 走进腾讯(一个关于面试准备的记录)
  4. 拓展客户有哪些诀窍?
  5. MySQL 执行 PROCEDURE ANALYSE 报错 ERROR 1064 (42000)
  6. [推荐]房地产软件信息化——透视房地产CRM应用模式 穆利堂-movno1
  7. 七夕节快到了,做个图钉画以及学习下Pillow吧
  8. 用C#实现人民币的小写转大写(源码)
  9. 2021年公务员事业单位考试百度网盘资料分享
  10. python人像变卡通_python 人像转漫画