• $Loj10155$ 数字转换(求树的最长链) 树形$DP$


    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

     1 #include<iostream>
     2 #include<cstdio>
     3 #define Rg register
     4 #define il inline
     5 #define go(i,a,b) for(Rg int i=a;i<=b;++i)
     6 #define yes(i,a,b) for(Rg int i=a;i>=b;--i)
     7 using namespace std;
     8 il int read()
     9 {
    10     int x=0,y=1;char c=getchar();
    11     while(c<'0'||c>'9'){if(c=='-')y=-1;c=getchar();}
    12     while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+c-'0';c=getchar();}
    13     return x*y;
    14 }
    15 const int N=50001;
    16 int n,ans,a[N],d1[N],d2[N];
    17 int main()
    18 {
    19     n=read();
    20     go(i,1,n)
    21         go(j,2,n/i)a[i*j]+=i;
    22     yes(x,n,1)
    23     {
    24         int y=a[x];if(y>=x)continue;
    25         if(d1[y]<d1[x]+1){d2[y]=d1[y],d1[y]=d1[x]+1;}
    26         else d2[y]=max(d2[y],d1[x]+1);
    27     }
    28     go(i,1,n)ans=max(ans,d1[i]+d2[i]);
    29     printf("%d
    ",ans);
    30     return 0;
    31 }
    View Code
    光伴随的阴影
  • 相关阅读:
    洛谷P5661 公交换乘(二分)
    洛谷P4047 [JSOI2010]部落划分(最小生成树)
    洛谷P2872 [USACO07DEC]Building Roads S(最小生成树)
    卸载重装VirtualBox回滚报错
    POJ1151 Atlantis(扫描线+线段树+离散化)
    QT入门-信号槽拓展
    Vue模板语法与常用指令总结
    Vue 生命周期
    querySelector和getElementById方法的区别
    ES6 Class(类)的继承与常用方法
  • 原文地址:https://www.cnblogs.com/forward777/p/11008262.html
Copyright © 2020-2023  润新知