【cf842C】 Ilya And The Tree(dfs、枚举因子)
题意
给一棵树求每个点到根的路上允许修改一个为0,gcd的最大值。
题解
g是从根到当前点允许修改的最大gcd,gs为不修改的最大gcd。枚举当前点的因子,更新路径上每个因子出现次数,回溯时减去。并用这个因子更新答案。另外当前点修改为0时,还要用父节点的gs更新答案。复杂度\(O(n\sqrt n)\)
代码
const int N=201000;
int n;
int a[N];
int u,v;
VI e[N];
int g[N],gs[N];
int p[N];
void dfs(int x,int fa,int dep){
for(int i=1;(ll)i*i<=a[x];++i)if(a[x]%i==0){
++p[i];if(i*i!=a[x])++p[a[x]/i];
if(p[i]>=dep-1) g[x]=max(g[x],i);
if(p[a[x]/i]>=dep-1) g[x]=max(g[x],a[x]/i);
}
g[x]=max(gs[fa],g[x]);
gs[x]=__gcd(a[x],gs[fa]);
for(auto &v:e[x])if(v!=fa)
dfs(v,x,dep+1);
for(int i=1;(ll)i*i<=a[x];++i)if(a[x]%i==0){
--p[i];if(i*i!=a[x])--p[a[x]/i];
}
}
int main() {
while(~scanf("%d",&n)){
mem(g,0);mem(gs,0);
rep(i,1,n+1)scanf("%d",a+i),e[i].clear();
rep(i,0,n-1)scanf("%d%d",&u,&v),e[u].pb(v),e[v].pb(u);
g[0]=gs[0]=a[1];
dfs(1,0,1);
rep(i,1,n+1)printf("%d%c",g[i],i==n?'\n':' ');
}
return 0;
}
【cf842C】 Ilya And The Tree(dfs、枚举因子)的更多相关文章
- HDU 2489 Minimal Ratio Tree(dfs枚举+最小生成树)
想到枚举m个点,然后求最小生成树,ratio即为最小生成树的边权/总的点权.但是怎么枚举这m个点,实在不会.网上查了一下大牛们的解法,用dfs枚举,没想到dfs还有这么个作用. 参考链接:http:/ ...
- HDU 2489 Minimal Ratio Tree (DFS枚举+最小生成树Prim)
Minimal Ratio Tree Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) ...
- CF842C Ilya And The Tree
思路: 1. 如果根节点是0,那么可以通过一次dfs计算出所有节点的最大值. 2. 如果根节点不是0,那么其余各点的最大值一定是根节点的一个因子.首先计算出根节点的所有因子.在dfs到一个深度为d的节 ...
- hdu2489 Minimal Ratio Tree dfs枚举组合情况+最小生成树
#include <stdio.h> #include <set> #include <string.h> #include <algorithm> u ...
- C. Ilya And The Tree 树形dp 暴力
C. Ilya And The Tree 写法还是比较容易想到,但是这么暴力的写法不是那么的敢写. 就直接枚举了每一个点上面的点的所有的情况,对于这个点不放进去特判一下,然后排序去重提高效率. 注意d ...
- POJ 2429 GCD & LCM Inverse (Pollard rho整数分解+dfs枚举)
题意:给出a和b的gcd和lcm,让你求a和b.按升序输出a和b.若有多组满足条件的a和b,那么输出a+b最小的.思路:lcm=a*b/gcd lcm/gcd=a/gcd*b/gcd 可知a/gc ...
- Codeforces Round #430 (Div. 2) C. Ilya And The Tree
地址:http://codeforces.com/contest/842/problem/C 题目: C. Ilya And The Tree time limit per test 2 second ...
- HDU 2489 Minimal Ratio Tree (dfs+Prim最小生成树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2489 Problem Description For a tree, which nodes and ...
- Codeforces 842C--Ilya And The Tree(dfs+树)
原题链接:http://codeforces.com/contest/842/problem/C 题意:一个以1为根节点的树,每个节点有一个值ai,定义美丽度:从根节点到这个节点的路径上所有ai的gc ...
随机推荐
- POJ - 3244-Difference between Triplets
其实我最开始没有这道题...是做到UPC-11079-小P的决斗,训练结束后然后搜索了一波,才了解这个题的. 非常牛逼的题...这么多人做出来了...我好菜... 对于每对三元组Ta=(La,Ja,K ...
- 【kindle笔记】之 《黑客微百科》-2018-6-17
前段时间复习六级的时候,从图书馆看到一本书,然后带回来了.今天开始读.今天是2018年6月17日. 严格来讲,一本不算kindle笔记的笔记,不过广义的啃豆笔记了解一下.哈哈. 首页说到的黑客理念是: ...
- E: 无法打开锁文件 /var/lib/dpkg/lock-frontend - open (13: 权限不够)E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-frontend),请查看您是否正以 root 用户运行?
一.解决方案 修改root密码,以root身份安装 sudo pwdroot root # 输入新密码即可
- Linux 典型应用之WebServer 安装和配置
Apache的基本操作 安装 yum install httpd 启动 service httpd start 在浏览器中输入以下Ip 发现无法访问 http://192.168.1.109/ 输入 ...
- python3 打开页面后多窗口处理三种方法
多窗口处理三种方法 导包,实例化浏览器from selenium import webdriver fx=webdriver.Firefox()方法一fx.switch_to.window(fx.wi ...
- java中的定时任务小示例
package package_1; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Timer; ...
- Redis 使用命令行的方式 获取 hash type key 的value值
1. 之前只是非常简单的看了下 get key 和 set key 但是这样 设置的 key value 应该是都 string 类型的 2. 但是没考虑过其他类型的 是如何获取 相关内容的 ,一直 ...
- Mybatis+Spring整合后Mapper测试类编写
public class UserMapperTest { private ApplicationContext applicationContext; @Before public void ini ...
- IntelliJ IDEA使用教程(非常全面)
这个编辑器我就不再多做介绍了.直接开始新建maven hello world 的Java web项目啦 你电脑上得有jdk1.7,或者1.8,然后就是maven3.x吧,再有就是tomcat7以上吧. ...
- spring 给一个类 生成test
右击一个类,然后:GoTo==>test ,就可以新建这个类的测试用例了,简单粗暴, 如果想要不污染数据库,就在一个测试用例 的标签@Test 下面在加上@RollBack 这样: @Test ...