AcWing1075 數字轉換 樹形DP 題解

2021-10-07 07:31:21 字數 1093 閱讀 2685

題目傳送門

如果乙個數 x 的約數之和 y(不包括他本身)比他本身小,那麼 x 可以變成 y,y 也可以變成 x。

例如,4 可以變為 3,1 可以變為 7。

限定所有數字變換在不超過 n 的正整數範圍內進行,求不斷進行數字變換且不出現重複數字的最多變換步數。

輸入格式

輸入乙個正整數 n。

輸出格式

輸出不斷進行數字變換且不出現重複數字的最多變換步數。

資料範圍

1≤n≤50000

輸入樣例:
輸出樣例:
樣例解釋

一種方案為:4→3→1→7。

題解:樹形dp:

首先預處理出每個數的約數之和,我們可以對每乙個合法的路徑進行建邊

最後就可以轉化為求樹的最長路徑問題

#include

#include

using namespace std;

const

int n =

50010

;int n;

int h[n]

, e[n]

, ne[n]

, idx;

int sum[n]

;bool vis[n]

;int ans;

void

add(

int a,

int b)

intdfs

(int u)

//求以u為根節點的最長路徑

else

if(d >= d2)d2 = d;

} ans =

max(ans, d1 + d2)

;return d1;

}int

main()

}for

(int i =

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

cout << ans << endl;

return0;

}

AcWing 1075 數字轉換

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

ACWing 1075 數字轉換

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

acwing 1075 數字轉換 (樹形DP)

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