hdu5468 Puzzled Elena
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的更多相关文章
- HDU 5468 Puzzled Elena
Puzzled Elena Time Limit: 2500ms Memory Limit: 131072KB This problem will be judged on HDU. Original ...
- 2015上海网络赛 A Puzzled Elena
题意:给定一棵树,求这个节点的所有子树中包括他本身与它互质的节点的个数. 解题思路:题利用dfs序+容斥原理+前缀和性质解决.题目中要求每个结点,和多少个它的子结点互素.如果每次为了求一个点去跑一遍d ...
- HDU 5468 Puzzled Elena (dfs + 莫比乌斯反演)
题意:给定一棵带权树,求每个点与其子树结点的权值互质的个数. 析:首先先要进行 dfs 遍历,len[i] 表示能够整除 i 的个数,在遍历的前和遍历后的差值就是子树的len值,有了这个值,就可以使用 ...
- HDU 5468 Puzzled Elena 莫比乌斯反演
题意: 给出一棵树,每个点上有权值.然后求每棵子树中与根节点互质( \(gcd(a, b) = 1\) )的节点个数. 分析: 对于一颗子树来说,设根节点的权值为\(u\), \(count_i\)表 ...
- HDU5468(dfs序+容斥原理)
Puzzled Elena Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)T ...
- 2015 ACM/ICPC Asia Regional Shanghai Online
1001 Puzzled Elena 1002 Antonidas 1003 Typewriter 1004 Count the Grid 1005 Code Formatting 1006 Ther ...
- 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: ...
- hdu 5468(dfs序+容斥原理)
Puzzled Elena Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)T ...
- 前言|Elena
2019.3.19更新置顶 2018.11.5更新置顶 2018.9.7更新置顶 -这里写下置顶- 嗨嗨嗨 这里AlenaNuna,偏远小渔村oi蒟蒻一只,各大题库id有Elena/AlenaNuna ...
随机推荐
- Cannot set a credential for principal 'sa'. (Microsoft SQL Server,错误: 15535)
在SQL SERVER 2008上上禁用sa登录时,遇到下面错误:"Cannot set a credential for principal 'sa'. (Microsoft SQL Se ...
- SQL SERVER 2012 修改数据库默认位置不立即生效
今天修改SQL SERVER 2012的数据库默认位置:即数据文件.日志文件默认位置时遇到一个问题,单击"服务器属性"(Server Properties)--> 数据库设置 ...
- (转)Div和Table的区别
原文:http://www.cnblogs.com/lovebear/archive/2012/04/18/2456081.html Div与table的区别 1:速度和加载方式方面的区别 div 和 ...
- CentOS安装LNMP环境的基础组件
注:以下所有操作均在CentOS 6.5 x86_64位系统下完成. 在安装LNMP环境之前,请确保已经使用yum安装了以下各类基础组件(如果系统已自带,还可以考虑yum update下基础组件): ...
- Redis学习资源
1 redis官方网站 http://redis.io/ 2 redis中文 http://redisdoc.com/ 3 redis的设计与实现 http://www.redisbook.com/ ...
- 极客DIY:打造你的专属黑客U盘
简介 由于“Bad USB漏洞”的存在,USB闪存驱动器也成了常见的攻击目标.Bad-USB让黑客可以重新编程微控器作为一个“人机界面装置”(HID)或键盘,然后在目标机器上执行自定义键盘敲击.这种情 ...
- 【原】移动web动画设计的一点心得——css3实现跑步
今年3月份,由于公司业务需要,我转岗到微信产品部,离开了TID团队,人都是有感情的动物,更何况在一个团队呆了快 3 年,心中十分舍不得,鬼哥说了“天下没有不散的宴席...”,在我的世界里又多了一次离别 ...
- 转载文章----十步完全理解SQL
转载地址:http://blog.jobbole.com/55086/ 很多程序员视 SQL 为洪水猛兽.SQL 是一种为数不多的声明性语言,它的运行方式完全不同于我们所熟知的命令行语言.面向对象的程 ...
- HTML ------ 关于表单 Form
Form(表单)主要用于采集和提交用户输入的信息,是页面与WEB服务器交互过程中 最重要的信息来源. 掌握表单(Form)有以下几个要点: 重要form属性 form常用控件 form提交方式 § 重 ...
- hibernate中HQL练习时候一个小小的错误导致语法异常
package cn.db.po.test; import java.util.List; import cn.db.po.User; import cn.db.po.biz.UserBiz; pub ...