牛客 樹上子鏈(模擬樹的直徑,求最大子樹)

2021-10-03 03:47:31 字數 1164 閱讀 7920

傳送門:

昨天牛客比賽,最後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.若找...