loj

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 ;
}

随机推荐

  1. 模板—树上倍增LCA

    int LCA(int x,int y) { if(x==y)return x; if(dep[x]>dep[y])swap(x,y); while(dep[x]<dep[y]) ;;i+ ...

  2. @codechef - SERSUM@ Series Sum

    目录 @description@ @solution@ @part - 1@ @part - 2@ @part - 3@ @accepted code@ @details@ @description@ ...

  3. 高级PHP开发:利用PHPEMS搭建在线考试平台

    今天给大家分享一个小技巧,就是利用PHP ems搭建在线考试平台:希望能给你给予帮助: 在给大家分享之前,这里推荐下我自己建的PHP开发-VIP资料出售平台 :638965404,不管你是小白还是大牛 ...

  4. python -- 类中--内置方法

    isinstance 和  issubclass isinstance(obj,b)  检查是否obj是否是类b的对象 class A(object):pass class B(A):pass b=B ...

  5. jsp中文乱码六种情况---解决方案

    转 jsp中文乱码六种情况---解决方案 2016年10月22日 21:32:55 阅读数:10672 来源:http://blog.csdn.net/lovesummerforever/articl ...

  6. 【DCN】路由操作

    offset */interface in/out access-list/prefix-list <1-16>                 // 修改路由偏移量   RIP偏移列表 ...

  7. C#的类

    一.String类 1.Length 字符的长度 string x = Console.ReadLine();int i = x.Length;// Length 是获取字符串的长度(从1开始数)Co ...

  8. Vue打包后放到服务器出现Loading chunk {n} failed 错误

    导航栏点击切换时 会出现Loading chunk {n} failed  ,刷新之后便不会出现.而且n在最新的build的文件中,n没有存在 偶然一次发现,项目更新迭代开发时上传测试环境后就会出现, ...

  9. H3C 二层ACL与用户自定义ACL

  10. [转]分布式监控工具Ganglia 介绍 与 集群部署.

    如果你目的很明确就是冲着标题来的,不爱看我唠叨,请直接进入第二个分割线之后的内容. 其实之前就是有做Swift监控平台的打算的,但是因为没什么硬性需求么,也不要紧的,就一直搁置了.最近实验室来了个大二 ...