$Loj10155$ 数字转换(求树的最长链) 树形$DP$
Description
如果一个数x的/约数和/y(不包括他本身)比他本身小,那么x可以变成y,y 也可以变成x.限定所有数字变换在不超过n的正整数范围内进行,求不断进行数字变换且不出现重复数字的最多变换步数.
注意断句QwQ,是x的/约数和/y,不是x的约数/和/y
Sol
先预处理出每个数的约数和,将可以转换的数连边
可将数x的约数和y看成x的父结点,将以x为约数和的数看成x的子结点,这显然是一棵树
题目也就转换成了求这棵数的最长链
对于结点x,只要维护 在以之为根的树内 一端为x的 最长链与次长链即可
(感觉上面那句话写得很凌乱,所以就自己打空格断句了)
具体来说,d1[x]表示最长链的长度,d2[x]表示次长链的长度,y是x的孩子
if(d1[y]+1>d1[x]) d2[x]=d1[x],d1[x]=d1[y]+1;
else d2[x]=max(d2[x],d1[y]+1);
之前在想为什么不是 if(d1[y]+1>d1[x]) d2[x]=max(d1[x],d2[y]+1),d1[x]=d1[y]+1;
也就是为什么y的次长链不能更新x的次长链,发现其实d1[x]与d2[x]不能x的同一棵子树中的!
画图理解一下
如果d1[1]和d2[1]都在右子树中,那么d1[1]+d2[1]所构成的链是图中红色箭头所表示的那样,实际并不能算是树中的一条链
Code
#include<iostream>
#include<cstdio>
#define Rg register
#define il inline
#define go(i,a,b) for(Rg int i=a;i<=b;++i)
#define yes(i,a,b) for(Rg int i=a;i>=b;--i)
using namespace std;
il int read()
{
int x=,y=;char c=getchar();
while(c<''||c>''){if(c=='-')y=-;c=getchar();}
while(c>=''&&c<=''){x=(x<<)+(x<<)+c-'';c=getchar();}
return x*y;
}
const int N=;
int n,ans,a[N],d1[N],d2[N];
int main()
{
n=read();
go(i,,n)
go(j,,n/i)a[i*j]+=i;
yes(x,n,)
{
int y=a[x];if(y>=x)continue;
if(d1[y]<d1[x]+){d2[y]=d1[y],d1[y]=d1[x]+;}
else d2[y]=max(d2[y],d1[x]+);
}
go(i,,n)ans=max(ans,d1[i]+d2[i]);
printf("%d\n",ans);
return ;
}
随机推荐
- Pytorch使用tensorboardX可视化。超详细!!!
tensorboard --logdir runs 改为 tensorboard --logdir=D:\model\tensorboard\runs 重点 在网上看了很多方法后发现将原本链接中的计算 ...
- 多版本python共存,安装三方库到指定python版本
多版本python安装过程略过不提提供完美解决python启动和各版本pip问题: python3下pip安装命令如下: py -3 -m pip install xxxxxx python2下pip ...
- 远程监控JVM
设置tomcat中catalina.sh设置JAVA_OPTS= JAVA_OPTS="-server -Xms595M -Xmx595M -Xmn223M -XX:SurvivorRati ...
- getopt、getopt_long和getopt_long_only解析命令行参数
一:posix约定: 下面是POSIX标准中关于程序名.参数的约定: 程序名不宜少于2个字符且不多于9个字符: 程序名应只包含小写字母和阿拉伯数字: 选项名应该是单字符或单数字,且以短横 '-' 为前 ...
- js写出你的名字的拼音,判断哪个字母出现的最多
function fn(str) { var obj = {}; for (var i = 0; i < str.length; i++) { if (!obj[str.charAt(i)]) ...
- centos 磁盘挂载
1.更改磁盘格式 fdisk -l fdisk /dev/vdb mkfs.xfs /dev/vdb1 mkfs.xfs /dev/vdb1 -f 2.查看UUID blkid 3.挂载文件夹 vim ...
- 一个框架看懂优化算法之异同 SGD/AdaGrad/Adam
Adam那么棒,为什么还对SGD念念不忘 (1) —— 一个框架看懂优化算法 机器学习界有一群炼丹师,他们每天的日常是: 拿来药材(数据),架起八卦炉(模型),点着六味真火(优化算法),就摇着蒲扇等着 ...
- spring+mybatis 整合
项目目录: 一.导入pom.xml依赖 最下边有 二.在applicationContext.xml配置连接器和数据库的数据源 三.流程:用户请求数据,springmvc解析url,通过控制器和适配器 ...
- Windows Community Toolkit 3.0 新功能 在WinForms 和 WPF 使用 UWP 控件
本文告诉大家一个令人震惊的消息,Windows Community Toolkit 有一个大更新,现在的版本是 3.0 .最大的提升就是 WinForm 和 WPF 程序可以使用部分 UWP 控件. ...
- H3C PAP验证配置示例
