hdu5468 Puzzled Elena

题意

求一棵子树内与它互质的点个数

解法

容斥

我们先求出与它不互质的数的个数,再用总数减去就好。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <vector>
using namespace std; namespace Input {
int a; char c; bool sign; inline int geti() {
sign = false;
while ((c = getchar()) < '0' || c > '9') sign |= c == '-';
a = c - '0';
while ((c = getchar()) >= '0' && c <= '9') a = (a << 3) + (a << 1) + c - '0';
return sign ? -a : a;
}
} const int N = 1e5 + 5;
vector<int> edge[N], Num[N], ty[N];
int Cnt[N], Val[N], ans[N], ch[N][70]; void init() {
memset(Cnt, 1, sizeof Cnt);
int i, j, cnt, len, t, k; cnt = 0;
for (i = 0; i < N; ++i) Num[i].clear(), ty[i].clear();
for (i = 2; i < N; ++i) {
if (Cnt[i]) {
for (j = i; j < N; j += i)
Cnt[j] = 0, Num[j].push_back(i), cnt += j == 4;
}
}
vector<int>tmp;
for (i = 2; i < N; ++i) {
tmp.clear();
for (j = 0; j < Num[i].size(); ++j)
tmp.push_back(Num[i][j]);
len = tmp.size(); Num[i].clear();
for (j = 1; j < (1 << len); ++j) {
cnt = 0, t = 1;
for (k = 0; k < len; ++k)
if (j & (1 << k)) {
++cnt; t *= tmp[k];
}
if (cnt & 1) ty[i].push_back(-1);
else ty[i].push_back(1);
Num[i].push_back(t);
}
}
} int dfs(int u, int fa) {
int si = 0, va = Val[u], i, v;
for (i = 0; i < Num[va].size(); ++i)
ch[u][i] = Cnt[Num[va][i]];
for (i = 0; i < edge[u].size(); ++i) {
v = edge[u][i];
if (v == fa) continue;
si += dfs(v, u);
}
ans[u] = si;
for (i = 0; i < Num[va].size(); ++i)
ans[u] += Cnt[Num[va][i]] - ch[u][i];
for (i = 0; i < Num[va].size(); ++i)
Cnt[Num[va][i]] += ty[va][i];
if (va == 1) ++ans[u];
return si + 1;
} int main() {
init();
int Case = 0, n, u, v, i;
while (scanf("%d", &n) ^ EOF) {
for (i = 1; i <= n; ++i) edge[i].clear();
for (i = 1; i < n; ++i) {
u = Input::geti(), v = Input::geti();
edge[u].push_back(v), edge[v].push_back(u);
}
memset(Cnt, 0, sizeof Cnt);
for (i = 1; i <= n; ++i) Val[i] = Input::geti();
dfs(1, 0);
printf("Case #%d:", ++Case);
for (i = 1; i <= n; ++i)
printf(" %d", ans[i]);
puts("");
}
return 0;
}

莫比乌斯反演

此题其实也可以用莫比乌斯反演做,不过其实与容斥差不多,因为mu[i]其实与ty[i]是一样的。

代码就不贴了,其实比较像。

hdu5468 Puzzled Elena的更多相关文章

  1. HDU 5468 Puzzled Elena

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

  2. 2015上海网络赛 A Puzzled Elena

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

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

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

  4. HDU 5468 Puzzled Elena 莫比乌斯反演

    题意: 给出一棵树,每个点上有权值.然后求每棵子树中与根节点互质( \(gcd(a, b) = 1\) )的节点个数. 分析: 对于一颗子树来说,设根节点的权值为\(u\), \(count_i\)表 ...

  5. HDU5468(dfs序+容斥原理)

    Puzzled Elena Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  6. 2015 ACM/ICPC Asia Regional Shanghai Online

    1001 Puzzled Elena 1002 Antonidas 1003 Typewriter 1004 Count the Grid 1005 Code Formatting 1006 Ther ...

  7. hdu 5468(莫比乌斯+搜索)

    hdu 5468 Puzzled Elena   /*快速通道*/ Sample Input 5 1 2 1 3 2 4 2 5 6 2 3 4 5   Sample Output Case #1: ...

  8. hdu 5468(dfs序+容斥原理)

    Puzzled Elena Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  9. 前言|Elena

    2019.3.19更新置顶 2018.11.5更新置顶 2018.9.7更新置顶 -这里写下置顶- 嗨嗨嗨 这里AlenaNuna,偏远小渔村oi蒟蒻一只,各大题库id有Elena/AlenaNuna ...

随机推荐

  1. [转]浅谈CSRF攻击方式

    在CSDN中看到对CSRF攻击的原理及防护文章,讲解浅显易懂,特转之: 来源:http://blog.csdn.net/fationyyk/article/details/50833620 一.CSR ...

  2. ORACLE使用GV_$TEMP_SPACE_HEADER统计临时表空使用情况不准确的问题

    以前写了一篇ORACLE临时表空间总结的文章, 里面介绍了几个查看临时表空间使用情况的脚本,其中一个脚本如下所示: SELECT TU.TABLESPACE_NAME                  ...

  3. linux

    托瓦兹跟BBS上面一堆工秳师一样, 他发现Minix虽然真癿很棒,但是谭宁邦教授就是丌愿意迚行功能癿加强,导致一堆工秳师在操作系统功能上面癿欲求丌满! 这个时候年轻癿托瓦兹就想:『既然如此,那我何丌自 ...

  4. Linux非root用户如何使用80端口启动程序

    默认情况下Linux的1024以下端口是只有root用户才有权限占用,我们的tomcat,apache,nginx等等程序如果想要用普通用户来占用80端口的话就会抛出java.net.BindExce ...

  5. nginx转发会 默认忽略 headers 中name带”_”的

    昨天遇到一个很蛋疼的问题,在提供的一个 http api中,有定义了一个"X_AUTH_TOKEN"自定义head,可是请求这个api时带上"X_AUTH_TOKEN&q ...

  6. “未来人类”的笔记本,谁买过哦

    在jd上看到这款笔记本http://item.jd.com/1166095693.html.拽的很!看看哦,我等IT屌丝别吓着了,看图片欣赏下.

  7. [python]获取当前年月

    import time time.strftime('%Y%m',time.localtime(time.time()))#获取当前年月

  8. [AJAX]ajax在兼容模式下失效解决办法

    使用jQuery,用ajax实现局部刷新功能,在火狐,360急速浏览器高速模式下,ie8,9都能正常运行,但切换到兼容模式下无效,解决办法有两种关闭浏览器兼容性视图,二是引入json2.js文件 这里 ...

  9. 第一个JAVA应用

    1.1创建源文件 1.1.1Java源文件结构 Java应用由一个或多个扩展名为“.Java”的文件构成,这些文件被成为源文件.从编译角度,则被称为编译单元(Compilation Unit). 如果 ...

  10. 洛谷P1196 银河英雄传说[带权并查集]

    题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦 创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山 ...