傳送門:
昨天牛客比賽,最後8分鐘左右ac這道題,這題正解應該是樹形dp,無奈我樹形dp學的不好,最後想到樹的直徑,樹的直徑是樹的特有性質,雖然我也不太確定,然後就dfs()模擬樹的直徑,兩次dfs(),求得路程中最大權值和,沒想到a了,有點小激動模擬樹的直徑ac**:
#include.h>
using namespace std;
#define ll long
long
const ll maxn=
1e6+5;
const ll base=
131;
ll head[maxn]
,a[maxn]
;struct node
edge[maxn<<1]
;ll cnt,ans,pp;
void
add(ll u,ll v)
void
dfs(ll u,ll fa,ll sum)
if(ansfor(ll i=head[u]
;~i; i=edge[i]
.nex)}}
intmain()
ans=
-199999999999999999
;dfs(1
,0,0
);dfs(pp,0,
0);//cout}
樹形dp解法:
#include.h>
using namespace std;
#define ll long
long
const ll maxn=
1e6+5;
ll dp[maxn]
,a[maxn]
,res;
vector
vec[maxn]
;void
dfs(ll u,ll fa)
} res=
max(res,dp[u]);
}int
main()
res=
-199999999999999999
;dfs(1
,0);
cout<}
牛客 樹上路徑(樹鏈)
思路 對於前兩個操作就是最基本操作,那麼問題就在於第三個操作,可以發現第三個操作就是求a1 a2 a3 an 1 an a2 a3 a4 an a3 a4 an an 1 an 那麼轉化一下就是 a1 a2 a3 an a1 a2 a3 an a1 a1 a2 a2 an an 2 那麼就維護 su...
牛客網求連續子陣列的最大和
hz偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了 在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如 連續子向量的最大和為8 從第0個開始,到第...
牛客 樹的子結構
題目要求 輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 解決此題需要分為兩步 1.在a樹中找到與b樹的根節點的值相等的結點r。2.再判斷b樹是否與a樹中以r為根的子樹具有相同的結構。第一步 1.遞迴遍歷樹a,在樹a中找與b樹的根節點的值相等的結點r。2.若找...