1072 樹的最長路徑(樹形DP)

2022-09-07 04:39:14 字數 1281 閱讀 5419

題目:

題意:n個點n-1條邊的無向圖樹,每條邊都有乙個權值,可正可負,求最大權值。

題解:樹形dp,,任取乙個點為根節點,記錄每個節點往下搜的所有路徑的權值,找到最大權值和第二大權值,以這個點為核心的最大權值的路徑就是這倆權值和。

#include #include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

//#include

//#include

//#include

//#define int long long

#define pb push_back

#define pii pair#define mpr make_pair

#define ms(a, b) memset((a), (b), sizeof(a))

#define x first

#define y secondtypedef

long

long

ll;const

int inf = 0x3f3f3f3f

;const ll inf = 0x3f3f3f3f3f3f3f3f

;const

int n = 10010, m = 2 * 10010

;const

double eps = 1e-8

;using

namespace

std;

intn;

inth[n],e[m],w[m],ne[m],idx;

intans;

void add(int u,int v,int

val)

int dfs(int u,int fa)

ans=max(ans,d1+d2); //

取這個點的第一大權值和第二大權值之和,構成這條鏈

return d1; //

返回最大權值

}signed main(

int argc, char

const *ar**)

dfs(

1,-1

); cout

return0;

}

view code

樹形DP 樹的最長路徑

給定一棵樹,樹中包含 nn 個結點 編號11 nn 和 n 1n 1 條無向邊,每條邊都有乙個權值。現在請你找到樹中的一條最長路徑。換句話說,要找到一條路徑,使得使得路徑兩端的點的距離最遠。注意 路徑中可以只包含乙個點。輸入格式 第一行包含整數 nn。接下來 n 1n 1 行,每行包含三個整數 ai...

數字轉換 樹形dp之樹的最長路徑應用

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

樹形dp ,求最大路徑權值,最長路徑

include include include include include include include include include include include using namespace std typedef long long ll const int maxn 500005...