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. Tomcat启动找不到JRE_HOME的解决方法

    在配置测试环境时,将生产服务器的Tomcat目录打包过来后解压后,启动Tomcat后,发现如下问题: [tomcat@gsp bin]$ ./shutdown.sh Using CATALINA_BA ...

  2. MS SQL Could not obtain information about Windows NT group/user 'domain\login', error code 0x5. [SQLSTATE 42000] (Error 15404)

    最近碰到一个有趣的错误:海外的一台数据库服务器上某些作业偶尔会报错,报错信息如下所示: -------------------------------------------------------- ...

  3. asp.net mvc 之旅—— 第四站 学会用Reflector调试我们的MVC框架代码

    我们知道,现在能调试.net程序通常有两个,第一个是ILSpy,还是一个是Reflector,这两个小反编译软件算是我们研究底层代码中所拥有的一把 锋利小尖刀~~~,比如你看到的ILSpy这样的界面图 ...

  4. 使用Docker快速部署Storm环境

    Storm的部署虽然不是特别麻烦,但是在生产环境中,为了提高部署效率,方便管理维护,使用Docker来统一管理部署是一个不错的选择.下面是我开源的一个新的项目,一个配置好了storm与mono环境的D ...

  5. JVM内存模型

    原文地址:http://www.cnblogs.com/dingyingsi/p/3760447.html 1.程序计数器 程序计数器(Program Counter Register)是一块较小的内 ...

  6. 迅为最新推出iTOP-6818开发平台无缝支持4418开发板

    iTOP-6818开发板是一款四核ARM 八核开发板与iTOP-4418开发板完全兼容,CPU主频1.4GHz,内存1GB DDR3(2GB可选),存储16GB EMMC,板载千兆以太网,GPS,WI ...

  7. 第一次在Django上编写静态网页

    新建一个Python Django工程: Win+R进入cmd命令界面,并cd到指定工程目录下,比如我的工程目录是E:\wamp\Apache24\www\ 输入E: 跳转E盘 输入cd wamp\A ...

  8. 理解CSS相对定位和固定定位

    × 目录 [1]相对定位 [2]固定定位 前面的话 一般地,说起定位元素是指position不为static的元素,包括relative.absolute和fixed.前面已经详细介绍过absolut ...

  9. J2EE基础之Servlet

    J2EE基础之Servlet 1.  什么是Servlet? Servlet即Java服务小程序,是使用应用程序设计接口以及相关类和方法的Java程序.它可以作为一种插件,像Applet程序一样嵌入到 ...

  10. cefsharp设置网页接受语言Accept-Language

    1.设置浏览器的请求控制器 webView.RequestHandler = new RequestHandler(); 2.新建RequestHandler类继承IRequestHandler接口, ...