藍本書p308
mx1存最大 mx2存次大 mx1[i]+mx2[i]是經過i點的最長鏈(一半加一半)
關於西街(細節):
first_deal()裡面的j迴圈必須從2開始 從1開始會重複計算 比如i=1 j=2和i=2 j=1重複
構建數的思想過程(敲黑板)
#include#include#include#include#includeusing namespace std;
int n;
int as;
int sum[60000];
int mx1[60000],mx2[60000];
void first_deal()
void work1()
else if(mx1[i]+1>mx2[sum[i]])
mx2[sum[i]]=mx1[i]+1; }}
int main()
大臣的旅費 樹型dp 求樹最長鏈
題目描述 很久以前,t王國空前繁榮。為了更好地管理國家,王國修建了大量的快速路,用於連線首都和王國內的各大城市。為節省經費,t國的大臣們經過思考,制定了一套優秀的修建方案,使得任何乙個大城市都能從首都直接或者通過其他大城市間接到達。同時,如果不重複經過大城市,從首都到達每個大城市的方案都是唯一的。j...
20160804 最長鏈 樹分治?樹DP?
題目大意 給一顆樹,求每個節點到其他所有節點的距離中最大的 使用dfs序和節點size維護乙個點的子樹,對於每個節點,只考慮過這個點的路徑,則可以用最長子鏈更新所有非最長鏈所在子樹的所有節點,用次長子鏈更新最長鏈所在子樹的所有節點。注意,為防止只有一條鏈,每個節點ans值的初值應是深度 向上一條鏈 ...
數字轉換 樹形dp之樹的最長路徑應用
第二天叫醒我的不是鬧鐘,是夢想!如果乙個數 x 的約數之和 y 不包括他本身 比他本身小,那麼 x 可以變成 y,y 也可以變成 x。例如,4 可以變為 3,1 可以變為 7。限定所有數字變換在不超過 n 的正整數範圍內進行,求不斷進行數字變換且不出現重複數字的最多變換步數。輸入格式 輸入乙個正整數...