[hdu5468]Puzzled Elena
时间:2019-10-15
本文章向大家介绍[hdu5468]Puzzled Elena,主要包括[hdu5468]Puzzled Elena使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
考虑对一个集合求莫比乌斯反演的过程,最终答案即$\sum\limits_{d|ai}\mu(d)\cdot calc(d)$(calc(d)表示i子树中d倍数的个数)
dfs时维护当前遍历到的点中i倍数的个数,对i搜之前和i搜完后差分一下就可以得到i子树的信息,用上述式子计算即可
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define N 100005 4 #define K 130 5 struct ji{ 6 int nex,to; 7 }edge[N<<1]; 8 int E,t,n,m,x,y,a[N],head[N],mu[N],vis[N],p[N],sum[N],ans[N],v[N][K],s[N][K]; 9 void add(int x,int y){ 10 edge[E].nex=head[x]; 11 edge[E].to=y; 12 head[x]=E++; 13 } 14 void dfs(int k,int fa){ 15 for(int i=1;i<=v[k][0];i++)s[k][i]=sum[v[k][i]]++; 16 for(int i=head[k];i!=-1;i=edge[i].nex) 17 if (edge[i].to!=fa)dfs(edge[i].to,k); 18 for(int i=1;i<=v[k][0];i++)ans[k]+=mu[v[k][i]]*(sum[v[k][i]]-s[k][i]); 19 } 20 int main(){ 21 mu[1]=1; 22 for(int i=2;i<N-4;i++){ 23 if (!vis[i]){ 24 mu[i]=-1; 25 p[++p[0]]=i; 26 } 27 for(int j=1;(j<=p[0])&&(i*p[j]<N-4);j++){ 28 vis[i*p[j]]=1; 29 if (i%p[j]==0)break; 30 mu[i*p[j]]=-mu[i]; 31 } 32 } 33 while (scanf("%d",&n)!=EOF){ 34 E=0; 35 memset(head,-1,sizeof(head)); 36 memset(v,0,sizeof(v)); 37 memset(s,0,sizeof(s)); 38 memset(sum,0,sizeof(sum)); 39 memset(ans,0,sizeof(ans)); 40 for(int i=1;i<n;i++){ 41 scanf("%d%d",&x,&y); 42 add(x,y); 43 add(y,x); 44 } 45 for(int i=1;i<=n;i++)scanf("%d",&a[i]); 46 for(int i=1;i<=n;i++){ 47 for(int j=1;j*j<=a[i];j++) 48 if (a[i]%j==0)v[i][++v[i][0]]=j; 49 for(int j=v[i][0];j;j--) 50 if (v[i][j]*v[i][j]<a[i])v[i][++v[i][0]]=a[i]/v[i][j]; 51 } 52 dfs(1,0); 53 printf("Case #%d:",++t); 54 for(int i=1;i<=n;i++)printf(" %d",ans[i]); 55 printf("\n"); 56 } 57 }
原文地址:https://www.cnblogs.com/PYWBKTDA/p/11677060.html
- MongoDB安全实战之审计
- 媒体控制接口(MCI)的学习与使用
- MFC自定义控件
- 算法基础:优先队列
- 黑暗的内存管理
- 二分查找
- 译文 | Android 开发中利用异步来优化运行速度和性能
- 算法基础6:二叉树查找
- 通过UDP广播实现Android局域网Peer Discovering
- tensorflow读取数据-tfrecord格式
- 用Python使用C语言程序(Windows平台)
- 译文 | 在使用过采样或欠采样处理类别不均衡数据后,如何正确做交叉验证?
- 花式解释AutoEncoder与VAE
- 用CNN做句子分类:CNN Sentence Classification (with Theano code)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法