C. Ilya And The Tree

题意

给一棵树求每个点到根的路上允许修改一个为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、枚举因子)的更多相关文章

  1. HDU 2489 Minimal Ratio Tree(dfs枚举+最小生成树)

    想到枚举m个点,然后求最小生成树,ratio即为最小生成树的边权/总的点权.但是怎么枚举这m个点,实在不会.网上查了一下大牛们的解法,用dfs枚举,没想到dfs还有这么个作用. 参考链接:http:/ ...

  2. HDU 2489 Minimal Ratio Tree (DFS枚举+最小生成树Prim)

    Minimal Ratio Tree Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) ...

  3. CF842C Ilya And The Tree

    思路: 1. 如果根节点是0,那么可以通过一次dfs计算出所有节点的最大值. 2. 如果根节点不是0,那么其余各点的最大值一定是根节点的一个因子.首先计算出根节点的所有因子.在dfs到一个深度为d的节 ...

  4. hdu2489 Minimal Ratio Tree dfs枚举组合情况+最小生成树

    #include <stdio.h> #include <set> #include <string.h> #include <algorithm> u ...

  5. POJ 2429 GCD &amp; 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 ...

  6. 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 ...

  7. HDU 2489 Minimal Ratio Tree (dfs+Prim最小生成树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2489 Problem Description For a tree, which nodes and ...

  8. Codeforces 842C--Ilya And The Tree(dfs+树)

    原题链接:http://codeforces.com/contest/842/problem/C 题意:一个以1为根节点的树,每个节点有一个值ai,定义美丽度:从根节点到这个节点的路径上所有ai的gc ...

  9. POJ1288 Sly Number(高斯消元 dfs枚举)

    由于解集只为{0, 1, 2}故消元后需dfs枚举求解 #include<cstdio> #include<iostream> #include<cstdlib> ...

随机推荐

  1. Informatica相同环境与不同环境的导入导出( Repository Name,Integration Service Name,Folder Name是否相同):

    Informatica相同环境与不同环境的导入导出( Repository Name,Integration Service Name,Folder Name是否相同): 1.repository N ...

  2. 【原创】C#搭建足球赛事资料库与预测平台(6) 赔率数据表设计2

            本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 开源C#彩票数据资料库系列文章总目录:[目录]C#搭建足球赛事资料库与预测平台与彩票数据分析目录 本篇文章开始将逐步介 ...

  3. .net下载

    1,Http 协议中有专门的指令来告知浏览器, 本次响应的是一个需要下载的文件. 格式如下: Content-Disposition: attachment;filename=filename.ext ...

  4. base_local_planner vs. dwa_planner

    http://answers.ros.org/question/10718/dwa_planner-vs-base_local_planner/ The dwa_local_planner suppo ...

  5. Flot chart学习笔记

    背景及相关简介 在最近的BS新项目中需要用到绘图数据显示的功能.在进行充足的选择之后决定才去开源的Flot.Flot是一个jQuery绘图库.主要用于简单的绘制图表功能.具有吸引人的渲染外观和互操作的 ...

  6. Kafka中操作topic时 Error:Failed to parse the broker info from zookeeper

      Kafka中操作topic时 Error: Failed to parse the broker info from zookeeper 1.问题描述   2.问题原因     kafka在启动后 ...

  7. 【BZOJ 2713】[Violet 2]愚蠢的副官&amp;&amp;【BZOJ1183】[Croatian2008]Umnozak——【数位DP】

    题目链接: 2713传送门 1183传送! 题解: 由于看不懂英文题解(十个单词十一个不认识……),所以只能自己想QAQ. 其实乱搞就好= =. 首先我们发现,各位数字乘积要在1e9以下才可能有用,这 ...

  8. jquery实现点击页面空白处,弹框消失

    要求:点击1,弹框2显示,点击空白处,弹框2消失 $("#AddDevices"):按钮1 $(".addDeviceBox")弹框2 //点击添加设备弹框 $ ...

  9. Microsoft Azure IoTHub Serials 2 - 如何为android应用添加IoTHub支持

    1. 在build.gradle(app)文件的dependencies中添加对以下项的依赖: 'com.microsoft.azure.sdk.iot:iot-device-client:1.5.3 ...

  10. RabbitMQ之路由键转发消息

    RabbitMQ学习 参考:https://www.jianshu.com/p/6b62a0ed2491 消息队列:目前流行的有 Kafka.RabbitMQ.ActiveMQ等 功能:为了解决消息的 ...