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]是一样的。
代码就不贴了,其实比较像。
转载于:https://www.cnblogs.com/cycleke/p/5838879.html
hdu5468 Puzzled Elena相关推荐
- hdu5468 Puzzled Elena(容斥 莫比乌斯反演)
hdu5468 Puzzled Elena 题意 求一棵子树内与它互质的点个数 解法 容斥 我们先求出与它不互质的数的个数,再用总数减去就好. #include <cstdio> #inc ...
- hdu5468 Puzzled Elena(容斥原理+dfs序)
hdu5468 题目 给一棵树,每个结点有一个值,现在求以每个结点为根的子树中与其互质的结点的个数 思路 这位博主讲的很好http://www.cnblogs.com/program-ccc/p/58 ...
- Puzzled Elena
Puzzled Elena . . 题意:给定一棵树,1为根节点,问每个节点的子树有多少个与他互质的数. . . 解法:DFS序加容斥原理(莫比乌斯),DFS时用一个全局数组记录,count[i] 表 ...
- hdu 5468 Puzzled Elena(前缀性质+dfs序+容斥)
题目链接:hdu 5468 Puzzled Elena 解题思路 预处理出每个数的因子(注意只需要质因子幂数最大为1的数,例如6=21∗316=2^1 * 3^1)然后用一个数组维护,fac[i]表示 ...
- 【HDU】5468 Puzzled Elena
Puzzled Elena 题目链接 Puzzled Elena 题目大意 给你一棵树,n个节点n-1条边,每个节点都有一个权值.现在让你求每个节点的子树下面有多少个节点与该节点互质. 题解 容斥原理 ...
- hdu5468 A Puzzled Elena (容斥原理)
题意:给定一棵树,求这个节点的所有子树与它互质的节点(包括他本身)的个数. http://acm.hdu.edu.cn/showproblem.php?pid=5468 #include<ios ...
- 【HDU - 5468】Puzzled Elena(容斥原理,dfs序,数学,素因子分解,有坑)
题干: Problem Description Since both Stefan and Damon fell in love with Elena, and it was really diffi ...
- HDU 5468 Puzzled Elena(2015 ACM/ICPC Asia Regional Shanghai Online)
题目大意 这道题要求出每个节点与其子树节点中有多少个节点互质,题目是这样,但是如果你认为真的是这样那就错了,因为有可能根节点是1,那么1与本身也是互质的!!其实我真的搞不懂,说好了与子树互质为什么就把 ...
- hdu 5468 Puzzled Elena
一颗大小为(n<=100000) 的树,根为1,每个节点有个权值.问:每个节点 和 以这个节点为根的子树中 有多少权值和根的权值互质. 做法,我们首先要明白一个东西,就是当你已经知道了k个数,并 ...
最新文章
- ffmpeg图片压缩为视频
- python基础代码事例-数据科学Python基础(附示例代码和练习题目)
- javascript OOP 面向对象编程
- PCB线宽与电流的关系
- java序列化_夯实Java基础系列22:一文读懂Java序列化和反序列化
- python项目画幅好画_python基础教程总结15——2 画幅好画
- Linux笔记-centos7配置网卡及iftop的使用
- c语言学生管理系统write to a text file,语言编程学生成绩管理系统.doc
- php和mysql实现图书管理系统_0074 实现图书管理系统的登录、员工和菜单功能
- 微型计算机釆用,计算机硬件选择题及答案.docx
- 如何进入腾讯、网易、阿里这样的互联网公司,看到第二条我就秒懂了~
- 于群matlab仿真,33637《MATLAB-Simulink电力系统建模与仿真》于群(实例程序)
- python流量分析_python 监控流量
- 光明乳业孤独症暖心礼包,让“星星的孩子”遇见光明未来
- 决战平安京选择正确的服务器,决战!平安京怎么预先选择自己的位置 匹配预选位流程攻略...
- 程序员合同日期不到想辞职_在职场,辞职有时是难免的,要怎样写辞职信才好呢...
- 鱼眼深度估计!环视近场感知系列之几何预测
- 2019 年科技趋势最全汇总!
- python二手房使用教程_python实战:基于链家网二手房数据解析任务
- java 内存 pdf_jvm内存模型高清版.pdf
热门文章
- linux下 USB动态监测 hotplug事件监测
- uni-app自定义tabBar;uni-app小程序自定义tabBar;uni-app小程序修改中间tabBar导航栏大小;uni-app中间导航栏凸起;uni-app修改底部导航栏
- [Redux/Mobx] 在redux中,什么是action?
- [Redux/Mobx] redux和flux的区别是什么?
- [react] React Fiber它的目的是解决什么问题?
- React开发(246):react项目理解 this打印
- React开发(152):注意替换路径
- 前端学习(2998):vue+element今日头条管理--element引入
- [html] input上传文件可以同时选择多张吗?怎么设置?
- [css] font-style的属性有Italic和oblique,两者有什么区别呢