HDU 5468(Puzzled Elena-mobius+树形dp)
来源:互联网 发布:土豆网视频下载 mac 编辑:程序博客网 时间:2024/05/23 22:55
一颗树每个点上有点权,求每个点与它子树中的点的点权是否互质。
dfs 的时候后减前即可。
由于
复杂度可以保证
#include<cstdio>#include<cstring>#include<algorithm>#include<functional>#include<iostream>#include<cmath> #include<vector>using namespace std;#define For(i,n) for(int i=1;i<=n;i++)#define Fork(i,k,n) for(int i=k;i<=n;i++)#define Rep(i,n) for(int i=0;i<n;i++)#define ForD(i,n) for(int i=n;i;i--)#define RepD(i,n) for(int i=n;i>=0;i--)#define Forp(x) for(int p=Pre[x];p;p=Next[p])#define MEM(a) memset(a,0,sizeof(a));#define MEMI(a) memset(a,127,sizeof(a));#define MEMi(a) memset(a,128,sizeof(a));#define INF (2139062143)#define F (100000007)#define pb push_back#define mp make_pair#define MAXN (100000+10)#define N (100000)typedef long long ll;int n,cnt[MAXN];int v[MAXN]; int mu[MAXN]={0};bool b[MAXN];vector<int> factor[MAXN];void make_mobius(int n) { memset(b,1,sizeof(b)); mu[1]=1; Fork(i,2,n) { if (b[i]) { for(int j=i;j<=N;j+=i) { if (i^j) b[j]=0; int k=j/i; if (k%i) mu[j]=-mu[k]; else mu[j]=0; } } if (mu[i]) { for(int j=i;j<=N;j+=i) { factor[j].pb(i); } } }} int edge[MAXN*2],Pre[MAXN],Next[MAXN*2],siz=1;void addedge(int u,int v){ edge[++siz]=v; Next[siz]=Pre[u]; Pre[u]=siz;}void addedge2(int u,int v){addedge(u,v),addedge(v,u);}int sz[MAXN],ans[MAXN];vector<int> temp[MAXN]; void dfs(int x,int fa){ int m=factor[v[x]].size(); Rep(i,m) { int d=factor[v[x]][i]; temp[x].pb(cnt[d]),cnt[d]++; } sz[x]=1; Forp(x) { int v=edge[p]; if (v==fa) continue; dfs(v,x); sz[x]+=sz[v]; } ans[x]=sz[x]; Rep(i,m) { int d=factor[v[x]][i]; ans[x]+=mu[d]*(cnt[d]-temp[x][i]); }}int main(){// freopen("hdu5468.in","r",stdin); make_mobius(N); int kcase=0; while(cin>>n) { For(i,n) temp[i].clear(); MEM(Pre) siz=1; MEM(cnt) For(i,n-1) { int u,v; scanf("%d%d",&u,&v); addedge2(u,v); } For(i,n) scanf("%d",&v[i]); dfs(1,0); printf("Case #%d:",++kcase); For(i,n) { printf(" %d",ans[i]); } putchar('\n'); } return 0;}
0 0
- HDU 5468(Puzzled Elena-mobius+树形dp)
- mobius HDOJ 5468 Puzzled Elena
- hdu 5468 Puzzled Elena
- 【HDU】5468 Puzzled Elena
- HDU 5468 Puzzled Elena (容斥)
- hdu 5468 Puzzled Elena(前缀性质+dfs序+容斥)
- HDU 5468 Puzzled Elena(DFS序+容斥原理)
- hdu 5468 Puzzled Elena 预处理+深搜+容斥
- HDU 5468 Puzzled Elena(容斥原理+dfs)
- Puzzled Elena
- HDU 5468 Puzzled Elena (DFS序+莫比乌丝反演 好题)
- HDU 5468 Puzzled Elena (2015年上海赛区网络赛A题)
- HDU 5468 Puzzled Elena(2015 ACM/ICPC Asia Regional Shanghai Online)
- hdu 5468 容斥加树形dp
- hdu5468 A Puzzled Elena (容斥原理)
- hdu5468 Puzzled Elena(容斥 莫比乌斯反演)
- hdu5468 Puzzled Elena(容斥原理+dfs序)
- 树形dp hdu Computer
- hdoj 3338 Kakuro Extension 【行进列出 最大流】
- Python实现文件夹深度优先遍历
- 邪恶者@百度游戏关键词 单页收录
- chapter1. 开始
- HUST 1017 Exact cover (Dancing Links 模板题)
- HDU 5468(Puzzled Elena-mobius+树形dp)
- light oj 1254 - Prison Break (Dijkstra 汽车加油行驶最优问题 最短路)
- USACO 2.3.1 Longest Prefix
- 《构建之法》第一章 概论
- 《构建之法》阅读笔记目录
- 文件目录过长导致无法删除
- 二叉树的镜像
- SpringMVC那些事-视图渲染
- 有环链表中寻找到环的起点