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

2021-06-18 04:24:45 字數 980 閱讀 4899

#include #include #include #include #include #include #include #include #include #include #include using namespace std;

typedef long long ll;

const int maxn = 500005;

const int maxm = 500005;

const ll inf = -1ll << 50;

struct nodee[maxm*2];

int head[maxn];

int tot;

void init()

void add(int u,int v,int w)

int n,m;

bool vis[maxn];

ll dp1[maxn];

ll dp2[maxn];

ll dp3[maxn];

int id1[maxn];

int id2[maxn];

void dfs1(int u,int pre)}}

else

}//dp2[u] = max(dp1[v]+e[i].w,dp2[u]);

//if(dp2[u] > dp1[u])swap(dp2[u],dp1[u]);}}

vis[u] = true;

}void dfs2(int u,int pre)

else

dfs2(v,u);

}vis[u] = true;

}int main(){

while(scanf("%d%d",&n,&m)!=-1){

init();

for(int i=0;i**有問題!,思想是第一遍dfs1求該節點距離子節點的最大值,第二遍dfs2從父親節點更新。

還有乙個問題是求一棵樹上的最長距離。

只要一遍dfs找最遠的節點,再從該節點找最遠的節點就可以了!

演算法 求最大路徑和

題目 給定乙個非空二叉樹,返回其最大路徑和。本題中,路徑被定義為一條從樹中任意節點出發,達到任意節點的序列。該路徑至少包含乙個節點,且不一定經過根節點。舉例 1,2,3 思路 二叉樹只能從根節點開始,深度或廣度遍歷。深度遍歷 1,可以遞迴遍歷到最左節點,然後一層一層的返回最大求和項。直到頂層。2,右...

練習之《求最大路徑》

題目描述 已知乙個斜三角 22 32 14 77 45 12 34 37 23 44 23 15 34 54 88 從最左上角元素開始往右或往右下走,請問順著哪條路所經過的值的總和最大,如可以有路線 22,32,34,23,54 22,12,44,34,88等等 請求出滿足值總和最大的那條線路。vi...

樹形DP 樹的最長路徑

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