hdu 5468 Puzzled Elena   /*快速通道*/

Sample Input

5
1 2
1 3
2 4
2 5
6 2 3 4 5
 

Sample Output

Case #1: 1 1 0 0 0

题意:在一棵树上,每个节点有值,求以x为根节点的树中,有多少与根节点互质

思路:

用num[i]记录节点中包含因子i的个数,然后搜索到当前根节点时,我们先记录下在此之前的num,然后遍历返回后,

计算num的差值,利用莫比乌斯原理,先ans记录树中所有的节点数,然后该加的加,该减的减。

莫比乌斯不清楚的话可以翻翻前面的文章。

参考以下大大博文:

AOQNRMGYXLMV

Tc_To_Top

  1. /*
  2. 如果互质,找出子树中包含val[cur]的因子的数,假设为6,则减去约数中含有2,3的
  3. 但是会重复减去含有6的,所以应该在加上含6的数
  4. 于是满足了莫比乌斯函数,合数为0,含奇数个质数为-1,含偶数个质数为1
  5. 感觉特别适合容斥原理。
  6.  
  7. 对于dfs序:/*并不了解,也可以做的
  8. 将树展现在数组上。
  9. void DFS(int u, int fa)
  10. {
  11. dfn ++;
  12. seq[dfn] = u;
  13. for(int i = HEAD[u]; i != -1; i = E[i].next)
  14. {
  15. int v = E[i].to;
  16. if(v != fa)
  17. DFS(v, u);
  18. }
  19. dfn ++;
  20. seq[dfn] = -u;
  21. }
  22.  
  23. 参考:
  24. AOQNRMGYXLMV:http://www.cnblogs.com/AOQNRMGYXLMV/p/4858452.html
  25. Tc_To_Top:http://blog.csdn.net/tc_to_top/article/details/48802683
  26. */
  27. #include <iostream>
  28. #include <cstdio>
  29. #include <cstring>
  30. #include <cstdlib>
  31. #include <queue>
  32. #include <vector>
  33. #include <algorithm>
  34. #include <functional>
  35. typedef long long ll;
  36. using namespace std;
  37.  
  38. const int inf = 0x3f3f3f3f;
  39. const int maxn = 100000;
  40.  
  41. int is_prime[maxn+10];
  42. int prime[maxn+10];
  43. int mu[maxn+10];
  44. int snum[maxn+10];
  45. vector<int> fac[maxn + 10];
  46. vector<int> F[maxn+10];
  47. int tot;
  48. void Moblus()
  49. {
  50. tot = 0;
  51. memset(is_prime,0,sizeof(is_prime));
  52. mu[1] = 1;
  53. for(int i = 2; i <= maxn; i++)
  54. {
  55. if(!is_prime[i])
  56. {
  57. prime[tot++] = i;
  58. mu[i] = -1;
  59. }
  60.  
  61. for(int j = 0; j < tot; j++)
  62. {
  63. if(prime[j]*i>maxn)
  64. break;
  65. is_prime[i*prime[j]] = 1;
  66. if(i % prime[j])
  67. {
  68. mu[i*prime[j]] = -mu[i];
  69. }
  70. else
  71. {
  72. mu[i*prime[j]] = 0;
  73. break;
  74. }
  75. }
  76. }
  77. for(int i = 2; i <= maxn; i++)
  78. {
  79. if(mu[i])
  80. for(int j = i; j <= maxn; j+=i)
  81. fac[j].push_back(i);
  82. }
  83. }
  84.  
  85. int val[maxn],num[maxn],ans[maxn];
  86.  
  87. void dfs(int cur,int par)
  88. {
  89. snum[cur] = 1;
  90. vector<int>tt;
  91. for(int i = 0; i<fac[val[cur]].size(); i++)
  92. {
  93. int v = fac[val[cur]][i];
  94. tt.push_back(num[v]);
  95. num[v]++;
  96.  
  97. }
  98. for(int i = 0; i < F[cur].size(); i++)
  99. {
  100. int v = F[cur][i];
  101. if(v == par)
  102. continue;
  103. dfs(v,cur);
  104. snum[cur] += snum[v];
  105. }
  106. ans[cur] = snum[cur];
  107. for(int i = 0; i<fac[val[cur]].size(); i++)
  108. {
  109. int v = fac[val[cur]][i];
  110. int c = num[v]-tt[i];
  111. if(c)
  112. ans[cur] += mu[v]*c;
  113.  
  114. }
  115. }
  116.  
  117. void ini()
  118. {
  119. tot= 0;
  120. memset(ans,0,sizeof(ans));
  121. memset(num,0,sizeof(num));
  122. //memset(head,-1,sizeof(head));
  123. }
  124.  
  125. int main()
  126. {
  127. int n;
  128. Moblus();
  129. int cas = 1,a,b;
  130. while(scanf("%d",&n) != EOF)
  131. {
  132. ini();
  133. for(int i = 0;i <= n;i++)
  134. F[i].clear();
  135. for(int i = 0; i <n-1; i++)
  136. {
  137. scanf("%d%d",&a,&b);
  138. F[a].push_back(b);
  139. F[b].push_back(a);
  140. }
  141. for(int i = 1 ; i <= n; i++)
  142. scanf("%d",&val[i]);
  143. dfs(1,0);
  144. printf("Case #%d:",cas++);
  145.  
  146. for(int i = 1; i <= n; i++)
  147. {
  148. printf(" %d",ans[i]);
  149. }
  150. printf("\n");
  151. }
  152. return 0;
  153. }

  

  1.  

hdu 5468(莫比乌斯+搜索)的更多相关文章

  1. HDU 5468 Puzzled Elena 莫比乌斯反演

    题意: 给出一棵树,每个点上有权值.然后求每棵子树中与根节点互质( \(gcd(a, b) = 1\) )的节点个数. 分析: 对于一颗子树来说,设根节点的权值为\(u\), \(count_i\)表 ...

  2. HDU 5468 Puzzled Elena (dfs + 莫比乌斯反演)

    题意:给定一棵带权树,求每个点与其子树结点的权值互质的个数. 析:首先先要进行 dfs 遍历,len[i] 表示能够整除 i 的个数,在遍历的前和遍历后的差值就是子树的len值,有了这个值,就可以使用 ...

  3. HDU 5468 Puzzled Elena

    Puzzled Elena Time Limit: 2500ms Memory Limit: 131072KB This problem will be judged on HDU. Original ...

  4. HDU 4499.Cannon 搜索

    Cannon Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Subm ...

  5. HDU 1045 (DFS搜索)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1045 题目大意:在不是X的地方放O,所有O在没有隔板情况下不能对视(横行和数列),问最多可以放多少个 ...

  6. HDU 1180 (BFS搜索)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1180 题目大意:迷宫中有一堆楼梯,楼梯横竖变化.这些楼梯在奇数时间会变成相反状态,通过楼梯会顺便到达 ...

  7. HDU 2531 (BFS搜索)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2531 题目大意: 你的身体占据多个点.每次移动全部的点,不能撞到障碍点,问撞到目标点块(多个点)的最 ...

  8. HDU 1026 (BFS搜索+优先队列+记录方案)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1026 题目大意:最短时间内出迷宫.迷宫里要杀怪,每个怪有一定HP,也就是说要耗一定时.输出方案. 解 ...

  9. HDU 1312 (BFS搜索模板题)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1312 题目大意:问迷宫中有多少个点被访问. 解题思路: DFS肯定能水过去的.这里就拍了一下BFS. ...

随机推荐

  1. [译]RabbitMQ教程C#版 - 工作队列

    先决条件 本教程假定RabbitMQ已经安装,并运行在localhost标准端口(5672).如果你使用不同的主机.端口或证书,则需要调整连接设置. 从哪里获得帮助 如果您在阅读本教程时遇到困难,可以 ...

  2. 关于团购VPS的事情报告

    作者 玄魂   2017-08-11 玄魂工作室-玄魂 玄魂工作室首先要抱歉,之前的说的继续组织大家购买vps的事情,不会再组织了.原因有以下几个:1)因为人多,需求各不相同,不好协调.2)服务都是购 ...

  3. Python内置函数(56)——locals

     英文文档: locals() Update and return a dictionary representing the current local symbol table. Free var ...

  4. Linux CentOS7.0 (02)修改主机名和ip地址

    一.主机名修改 1.查看命令 在CentOS中,有三种定义的主机名:静态的(static),瞬态的(transient),和灵活的(pretty). "静态"主机名也称为内核主机名 ...

  5. GIT入门笔记(7)- 修改文件并向版本库提交

    1.修改文件vi readme.txt git status 发现被修改的文件列表git diff readme.txt 2.git add readme.txt git status  --注意gi ...

  6. maven入门(9)Maven常用命令

    Maven常用命令 清理 clean编译 compile打包 package安装 install跳过测试 clean package -Dmaven.test.skip=true

  7. 使用 C#/.NET Core 实现单体设计模式

    本文的概念内容来自深入浅出设计模式一书 由于我在给公司做内培, 所以最近天天写设计模式的文章.... 单体模式 Singleton 单体模式的目标就是只创建一个实例. 实际中有很多种对象我们可能只需要 ...

  8. format的应用

    >>> "{a} love {b}.{c}".format(a="I", b="Fish", c="com&qu ...

  9. Text-插入图片

    #text插入图片 from tkinter import * master=Tk() text=Text(master,width=50,height=50) text.pack() photo=P ...

  10. 微信小程序:模板消息推送提示{“errcode”:41030,”errmsg”:”invalid page hint: [gP1eXXXXXX]”}

    在开发小程序 模板消息定时推送功能时,在开发版测试程序功能运行正常,但提交到线上后提示报错{“errcode”:41030,”errmsg”:”invalid page hint: [gP1eXXXX ...