DP 樹形 DP 數字轉換

2021-10-02 19:25:14 字數 839 閱讀 8537

並不容易看出的模型:在n以內的數字和她們不包括自身的約數和(要求小於這個數本身)構成的森林中找到最長的樹的直徑。

上述模型成立是因為每個數字的約數和(不包括自己,下同)是乙個定值,我們正好根據大小關係建立有向樹來進行dfs,根據樹的直徑求法,就可以得到結果了。

**:

#include

#include

#include

#include

using

namespace std;

const

int n=

50010

,m=n*2;

int e[m]

,idx,ne[m]

,h[n]

;int n,w[m]

,sum[m]

,v[m]

;int ans;

//雖然小->大和大->小都可以轉化,但是不走重複的路,就可建一棵有向樹,然後算通過某個根節點的最大和次大的和

intdfs

(int u)

else

if(d>d2) d2=d;

} ans=

max(ans,d1+d2)

;return d1;

}void

add(

int a,

int b)

intmain()

for(

int i=

1;i<=n;i++)if

(!v[i]

)dfs

(i);

cout

}

數字轉換 樹形DP

如果乙個數x的約數和 不包括它本身,下同 比它本身小,那麼x可以變成它的約數和 如果對於某個y x且y的約數和為x,那麼x也可以變成y。例如,4可以變為3,1可以變為7。限定所有的數字變換在不超過n的正整數範圍內進行,求不斷進行數字變換且沒有重複數字出現的最多變換步數。輸入乙個正整數n 輸出不斷進行...

acwing 1075 數字轉換 (樹形DP)

首先,對於小於n的每個數,我們可以確定它的約數之和 不包括自己 是固定的,就像4的約數之和一定是3,不可能是其他的,那麼我們就可以將2 n的每個數的約數之和求出sum i 對於sum i i 的邊 因為對於每個i,sum i 是唯一確定的 也就是說每個兒子都有唯一乙個父節點,那麼我們最終就會構成森林...

AcWing1075 數字轉換 樹形DP 題解

題目傳送門 如果乙個數 x 的約數之和 y 不包括他本身 比他本身小,那麼 x 可以變成 y,y 也可以變成 x。例如,4 可以變為 3,1 可以變為 7。限定所有數字變換在不超過 n 的正整數範圍內進行,求不斷進行數字變換且不出現重複數字的最多變換步數。輸入格式 輸入乙個正整數 n。輸出格式 輸出...