hdu5468

题目

给一棵树,每个结点有一个值,现在求以每个结点为根的子树中与其互质的结点的个数

思路

这位博主讲的很好http://www.cnblogs.com/program-ccc/p/5813771.html
首先我们是可以用容斥求出集合中不互素的元素个数,用总个数减一下就行了。
具体就是:①将元素进行质因数分解。②将质因数可能产生的乘积的出现次数加1。最后利用容斥原理求解。见代码。
用到的遍历是后序遍历,所以要先求出未进入该节点子节点时的不互素的数的个数,也就是与父节点其他子节点的不互素的个数,再在遍历完当前节点子节点后再求一次总数再相减就是当前节点子节点的情况。
对我来说:有了一个容斥的模版。
容斥原理在OJ中常解决两个典型问题:①求S中有多少个数与x不互素。②求1~m中有多少个数与n不互素。

代码

#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#include <cstdio>using namespace std;typedef long long ll;
const int maxn=100010;vector<int>prime[maxn];
int cnt[maxn],res[maxn];
int head[maxn],tot,n,val[maxn];struct node
{int next;int to;
} edge[maxn*2];void addedge(int from,int to)
{edge[tot].to=to;edge[tot].next=head[from];head[from]=tot++;
}void init()
{for(int e=2; e<maxn; e++){if(!prime[e].size())for(int i=e; i<maxn; i+=e){prime[i].push_back(e);}}
}int cal(int n,int type)
{int ans=0;for(ll mark=1; mark<(1<<prime[n].size()); mark++){ll odd=0;ll mul=1;for(ll i=0; i<prime[n].size(); i++){if(mark&(1<<i)){odd++;mul*=prime[n][i];}}if(odd&1) ans+=cnt[mul];else ans-=cnt[mul];cnt[mul]+=type;}return ans;
}int dfs(int u,int fa)
{int s=0;int pre=cal(val[u],0);for(int i=head[u]; ~i; i=edge[i].next){int v=edge[i].to;if(v==fa) continue;s+=dfs(v,u);}int post=cal(val[u],1);res[u]=s-(post-pre);if(val[u]==1) res[u]++;return s+1;}int main()
{init();int kase=1;while(scanf("%d",&n)!=EOF){memset(head,-1,sizeof(head));memset(cnt,0,sizeof(cnt));tot=0;for(int i=1; i<n; i++){int u,v;scanf("%d %d",&u,&v);addedge(u,v);addedge(v,u);}for(int i=1; i<=n; i++)scanf("%d",&val[i]);dfs(1,-1);printf("Case #%d: ",kase++);for(int i=1; i<n; i++){printf("%d ",res[i]);}printf("%d\n",res[n-1]);}return 0;
}

hdu5468 Puzzled Elena(容斥原理+dfs序)相关推荐

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

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

  2. hdu5468 Puzzled Elena

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

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

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

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

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

  5. Puzzled Elena

    Puzzled Elena . . 题意:给定一棵树,1为根节点,问每个节点的子树有多少个与他互质的数. . . 解法:DFS序加容斥原理(莫比乌斯),DFS时用一个全局数组记录,count[i] 表 ...

  6. 【HDU】5468 Puzzled Elena

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

  7. 2015上海网络赛 A Puzzled Elena

    题意:给定一棵树,求这个节点的所有子树中包括他本身与它互质的节点的个数. 解题思路:题利用dfs序+容斥原理+前缀和性质解决.题目中要求每个结点,和多少个它的子结点互素.如果每次为了求一个点去跑一遍d ...

  8. 【BZOJ2434】[NOI2011]阿狸的打字机 AC自动机+DFS序+树状数组

    [BZOJ2434][NOI2011]阿狸的打字机 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P ...

  9. A and B and Lecture Rooms CodeForces - 519E LCA+dfs序

    看到这个题的第一个思路就是就是统计以每一个点为根的所有节点个数,然后具体就分情况讨论一下即可. 因为刚刚学习了dfs序,这个题就用了dfs序来通过进出时间戳来相减表示其为根的子节点个数. 分情况 我们 ...

最新文章

  1. WebJars 进行 css js 资源文件管理
  2. 剑指offer:扑克牌的顺子问题
  3. 数据库系统概念总结:第一章 引言
  4. PyCharm出现module ‘matplotlib’ has no attribute ‘verbose问题
  5. 设计洪水位与校核洪水位
  6. 申请美国博士后的经验
  7. java volatile 原子性_Java中volatile不能保证原子性的证明
  8. Color Cube – 国产的优秀配色取色工具
  9. c++用化简命题逻辑公式的方法设计一个5人表决开关电路,要求3人以上(含3人)同意则表决通过
  10. c#html转换pdf,[C#] 网页Html转PDF档(一行程式码解决)
  11. Python习题——2018-03-28作业
  12. 电信路由器用linux开发板,WRTnode: WRTnode是基于家用无线路由器芯片的开源Linux开发板,想法源于我之前的项目和产业经验...
  13. 2022-03-27 screenX和clientX的区别以及offsetX和pageX的区别
  14. (转)【mysql元数据库】使用information_schema.tables查询数据库和数据表信息 ---数据记录大小统计...
  15. ImageMagick将多张图片拼接成一张图片_今天才发现,微信按下“这个”按钮,能将手机里的照片拼接成长图...
  16. 联通光猫HG2543C1改桥接备忘
  17. 学会这三款软件,可以轻松完成录音转文字操作
  18. HTML视频学习教程,让你实战入门前端
  19. Codeforces 1106F Lunar New Year and a Recursive Sequence 矩阵快速幂,原根转化模意义下对数,BSGS
  20. 宁波市教育学院计算机系主任,欢迎宁波诺丁汉大学计算机系主任白瑞斌教授一行到访南科大...

热门文章

  1. Extjs操作Dom
  2. 中国汽车零部件行业规模预测及投资前景展望报告2022-2028年版
  3. 【文学文娱】《贺吾司11载之奥森健康跑》
  4. 使用pymupdf开发的pdf查看器-tkinter篇
  5. Mac版魔兽争霸3 1.24e下载
  6. 风力发电控制系统的matlab,基于MATLAB的风机控制系统仿真
  7. 中移动“飞聊”28日正式发布 飞信官网可下载
  8. 如何提高百度搜索结果出图率
  9. 首版次高端软件的申报材料?
  10. SD卡之FATFS库移植