【HDU】5468 Puzzled Elena
来源:互联网 发布:计量经济学软件 编辑:程序博客网 时间:2024/05/23 22:40
Puzzled Elena
题目链接
- Puzzled Elena
题目大意
给你一棵树,n个节点n-1条边,每个节点都有一个权值。现在让你求每个节点的子树下面有多少个节点与该节点互质。
题解
容斥原理或默比乌斯反演
因为要考虑互质,而这里每个节点又是离散的,我们考虑先求出每个节点值的因子(质因子次数为1,比如8就只有一个2),然后设
然而求
代码
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <vector>#define maxn 100005using namespace std;struct edge{ int u,v,next;};edge e[maxn<<1];int n,mu[maxn],p[maxn],cnt,a[maxn],tag,ans[maxn],v[maxn],nume,pre[maxn];vector<int> fac[maxn];bool vis[maxn];void setup(int high){ cnt=0; memset(mu,0,sizeof(mu)); memset(p,0,sizeof(p)); memset(vis,0,sizeof(vis)); mu[1]=1; for (int i=2;i<=high;i++) { if (!vis[i]) { mu[i]=-1; vis[i]=1; p[cnt++]=i; } for (int j=0;j<cnt&&p[j]*i<=high;j++) { vis[i*p[j]]=1; if (i%p[j]) mu[i*p[j]]=-mu[i]; else { mu[i*p[j]]=0; break; } } } for (int i=2;i<=high;i++) if (mu[i]) for (int j=i;j<=high;j+=i) fac[j].push_back(i);}void dfs(int u,int father){ int l1,sz; l1=fac[v[u]].size(); vector<int> F; sz=tag++; for (int i=0;i<l1;i++) { int P=fac[ v[u] ][i]; F.push_back(a[P]); a[P]++; } for (int i=pre[u];i!=-1;i=e[i].next) { int v=e[i].v; if (v==father) continue; dfs(v,u); } ans[u]=tag-sz; for (int i=0;i<l1;i++) { int P=fac[ v[u] ][i]; int c=a[P]-F[i]; if (c) ans[u]+=c*mu[P]; } //if (u==1) ans++;}void addedge(int u,int v){ e[nume].u=u; e[nume].v=v; e[nume].next=pre[u]; pre[u]=nume; nume++;}int main(){ int Case=1; setup(maxn-5); while (scanf("%d",&n)!=EOF) { memset(a,0,sizeof(a)); memset(ans,0,sizeof(ans)); memset(v,0,sizeof(v)); memset(e,0,sizeof(e)); memset(pre,-1,sizeof(pre)); int c,d; nume=0; tag=0; for (int i=0;i<n-1;i++) { scanf("%d%d",&c,&d); addedge(c,d); addedge(d,c); } for (int i=1;i<=n;i++) scanf("%d",&v[i]); dfs(1,0); printf("Case #%d: ",Case++); for (int i=1;i<n;i++) printf("%d ",ans[i]); printf("%d\n",ans[n]); } return 0;}
0 0
- hdu 5468 Puzzled Elena
- 【HDU】5468 Puzzled Elena
- HDU 5468(Puzzled Elena-mobius+树形dp)
- HDU 5468 Puzzled Elena (容斥)
- hdu 5468 Puzzled Elena(前缀性质+dfs序+容斥)
- HDU 5468 Puzzled Elena(DFS序+容斥原理)
- hdu 5468 Puzzled Elena 预处理+深搜+容斥
- HDU 5468 Puzzled Elena(容斥原理+dfs)
- mobius HDOJ 5468 Puzzled Elena
- Puzzled Elena
- HDU 5468 Puzzled Elena (DFS序+莫比乌丝反演 好题)
- HDU 5468 Puzzled Elena (2015年上海赛区网络赛A题)
- HDU 5468 Puzzled Elena(2015 ACM/ICPC Asia Regional Shanghai Online)
- hdu5468 A Puzzled Elena (容斥原理)
- hdu5468 Puzzled Elena(容斥 莫比乌斯反演)
- hdu5468 Puzzled Elena(容斥原理+dfs序)
- There is a code,i'm puzzled
- 让人不知所以的IE(The Puzzled IE)
- Yoshua Bengio等大神传授:26条深度学习经验
- OpenCV实现FloodFill泛洪填充算法的代码及相关函数详解
- LeetCode Sum of Two Integers
- 完全理解Android中的RemoteViews
- 在SQLserver中stuff 函数用法
- 【HDU】5468 Puzzled Elena
- hdu5723(16多校第1场,树上两点平均距离的期望)
- 监听开关机,发送广播
- Codeforces Round #363 (Div. 2) C dp
- uva 401 回文词
- 可变參函数设计
- 对话机器学习大神Michael Jordan:简介
- React Native开发android应用
- dddd