題目:
題意:n個點n-1條邊的無向圖樹,每條邊都有乙個權值,可正可負,求最大權值。
題解:樹形dp,,任取乙個點為根節點,記錄每個節點往下搜的所有路徑的權值,找到最大權值和第二大權值,以這個點為核心的最大權值的路徑就是這倆權值和。
#include #includeview code#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;
}
樹形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...