顯然可以樹dp。
dp[x]為從子樹到點x的最大權值。
然後我們每次對乙個點記錄,從子樹來的最大值和次大值。
每次轉移即可,或者是直接到根。
要注意初始值為-1e9而不是0
ac**:
#pragma gcc optimize("-ofast","-funroll-all-loops")
#include
//#define int long long
using namespace std;
const
int n=
1e6+
10,m=n<<1;
int dp[n]
,res,c[n]
,n;int head[n]
,to[m]
,w[m]
,nex[m]
,tot;
inline
void
add(
int a,
int b,
int c)
void
dfs(
int x,
int fa)
res=
max(res,dp[x]
+c[x]);
res=
max(res,mx1+mx2)
; dp[x]
=max
(dp[x]
,c[x]);
}inline
void
solve()
signed
main()
數對之差的最大值
題目 在陣列中,數字減去它右邊的數字得到乙個數對之差。求所有數對之差的最大值。例如在陣列中,數對之差的最大值是11,是16減去5的結果。static int maxdiff int arr if arr.length 2 arr null return 0 int max arr 0 intmaxd...
數對之差的最大值
題目 在陣列中,數字減去它右邊的數字得到乙個數對之差。求所有數對之差的最大值。例如在陣列中,數對之差的最大值是11,是16減去5的結果。分析 看到這個題目,很多人的第一反應是找到這個陣列的最大值和最小值,然後覺得最大值減去最小值就是最終的結果。這種思路忽略了題目中很重要的一點 數對之差是乙個數字減去...
int 最大值 239 滑動視窗最大值
給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗內的 k 個數字。滑動視窗每次只向右移動一位。返回滑動視窗中的最大值。示例 輸入 nums 1,3,1,3,5,3,6,7 和 k 3 輸出 3,3,5,5,6,7 解釋 滑動視窗的位置 最大...