题意:

给出一棵树,每个点上有权值.然后求每棵子树中与根节点互质( \(gcd(a, b) = 1\) )的节点个数.

分析:

对于一颗子树来说,设根节点的权值为\(u\), \(count_i\)表示权值为\(i\)的倍数的节点的个数.

那么根据莫比乌斯反演,与\(u\)互质的节点的个数为\(\sum_{d|u}\mu(d)count_d\)

所以,我们记录一下遍历子树之前的\(count\)值和遍历子树之后的\(count\)值,作差就是这棵子树的\(count\)值

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std; const int maxn = 100000; int mu[maxn + 10], pcnt, prime[maxn];
bool vis[maxn + 10];
vector<int> factors[maxn + 10];
vector<int> G[maxn + 10]; void preprocess() {
pcnt = 0;
mu[1] = 1;
for(int i = 2; i <= maxn; i++) {
if(!vis[i]) {
mu[i] = -1;
prime[pcnt++] = i;
}
for(int j = 0; j < pcnt && i * prime[j] <= maxn; j++) {
vis[i * prime[j]] = true;
if(i % prime[j] != 0) mu[i * prime[j]] = -mu[i];
else {
mu[i * prime[j]] = 0;
break;
}
}
} for(int i = 2; i <= maxn; i++) if(mu[i])
for(int j = i; j <= maxn; j += i) factors[j].push_back(i);
} int val[maxn + 10];
int n; int cnt[maxn], sz[maxn], ans[maxn]; void dfs(int u, int fa) {
sz[u] = 1;
vector<int> pre;
for(int d : factors[val[u]]) {
pre.push_back(cnt[d]);
cnt[d]++;
}
for(int v : G[u]) {
if(v == fa) continue;
dfs(v, u);
sz[u] += sz[v];
}
ans[u] = sz[u];
for(int i = 0; i < factors[val[u]].size(); i++) {
int d = factors[val[u]][i];
int c = cnt[d] - pre[i];
if(c) ans[u] += mu[d] * c;
}
} int main()
{
preprocess(); int kase = 1;
while(scanf("%d", &n) == 1 && n) {
for(int i = 1; i <= n; i++) G[i].clear(); for(int u, v, i = 1; i < n; i++) {
scanf("%d%d", &u, &v);
G[u].push_back(v);
G[v].push_back(u);
}
for(int i = 1; i <= n; i++) scanf("%d", val + i); memset(cnt, 0, sizeof(cnt));
dfs(1, 0); printf("Case #%d:", kase++);
for(int i = 1; i <= n; i++) printf(" %d", ans[i]);
printf("\n");
} return 0;
}

HDU 5468 Puzzled Elena 莫比乌斯反演的更多相关文章

  1. HDU 5468 Puzzled Elena

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

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

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

  3. HDU 5321 Beautiful Set (莫比乌斯反演 + 逆元 + 组合数学)

    题意:给定一个 n 个数的集合,然后让你求两个值, 1.是将这个集合的数进行全排列后的每个区间的gcd之和. 2.是求这个集合的所有的子集的gcd乘以子集大小的和. 析:对于先求出len,len[i] ...

  4. HDU 4746 Mophues【莫比乌斯反演】

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4746 题意: 1≤x,y≤n , 求gcd(x,y)分解后质因数个数小于等k的(x,y)的对数. 分 ...

  5. HDU 1695 GCD (莫比乌斯反演)

    GCD Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  6. HDU 1695 GCD (莫比乌斯反演模板)

    GCD Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  7. hdu 1695 容斥原理或莫比乌斯反演

    GCD Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  8. hdu 1695: GCD 【莫比乌斯反演】

    题目链接 这题求[1,n],[1,m]gcd为k的对数.而且没有顺序. 设F(n)为公约数为n的组数个数 f(n)为最大公约数为n的组数个数 然后在纸上手动验一下F(n)和f(n)的关系,直接套公式就 ...

  9. HDU 5608 function(莫比乌斯反演 + 杜教筛)题解

    题意: 已知\(N^2-3N+2=\sum_{d|N}f(d)\),求\(\sum_{i=1}^nf(i) \mod 1e9+7\),\(n\leq1e9\) 思路: 杜教筛基础题? 很显然这里已经设 ...

随机推荐

  1. 右侧导航栏(动态添加数据到list)

    页面样式 <style> .scroll { position: fixed; right: 5%; top: 5em; background: #ccc; display: none; ...

  2. Canvas基本绘画学习

    学好Canvas,从简单开始.下面是一些Canvas入门最基本的实例分享: <!DOCTYPE html> <html> <head lang="en" ...

  3. ios获取数据之encodeURI 和 decodeURI

    在APP开发过程中,免不了要进行ios的数据处理,在ios传递数据的过程中,会出现JSON数据获取不到的情况,这时候就轮到encodeURI 和 decodeURI出马了. 1.encodeURI,d ...

  4. 用户登录保存数据实例(慕课笔记 使用SharedPreferences保存用户名)

    学习视频之后自己操作时的笔记. 0.视频地址:http://www.imooc.com/video/3265 1.功能预览: 说明:1)输入错误用户名和密码,点击登录,弹出提示框“禁止登录”: 2)输 ...

  5. HTTP 错误 500.0 - Internal Server Error

    最近在二次开发一个APS.NET网站,将网站部署到IIS后,输入:http://localhost/upload/ 时,报错“HTTP 错误 500.0 - Internal Server Error ...

  6. linux命令之文本查看

    vi掌握练习: 英文文档,相同的单词复制粘贴光标移动编辑等操作: cat:显示文件所有内容,小文件查看时使用. 缺点:文件大时不方便查看,文件很大时,会抢占系统资源,会出现命令崩溃. [zyj@loc ...

  7. Linux下如何修改用户默认目录

      Linux下默认的用户目录一般为/home/xxx(root用户除外),有些时候我们可能需要修改这个目录,下面我就给大家分享2中修改的方法 工具/原料 Linux操作系统 方法/步骤 1 1.切换 ...

  8. img标签src资源无法加载,报net::ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION错

    html代码: chrome和360浏览器均报错,系统自带IE.Firefox浏览器没有问题 原因:加载的资源名含有半角逗号(,)或者别的特殊符号 解决办法:后台给资源名加上双引号("&qu ...

  9. 协议详解3——IP

    1. 特点: 所有的TCP,UDP,ICMP,IGMP数据都以IP数据报格式传输.  提供不可靠,无连接服务. 不可靠: 不能保证IP数据报能成功到达目的.IP仅提供最好的传输服务.如果发生某种错误时 ...

  10. JavaScript对象属性

    JavaScript对象的属性有两类:数据属性和访问器属性 数据属性 数据属性有四个特性,分别为: [[value]]属性的值 [[writeable]]属性是否可以修改 [[enumerable]] ...