P1122 最大子樹和 (樹形DP)

2021-10-03 20:45:51 字數 1340 閱讀 9585

第一次寫樹形dp,找了乙個簡單的題,先熟悉一下套路,雖然自己的這種寫法,過了,可以求到最大的子樹和,但是不能求到每個結點的最大子樹和,只有某一部分的最大子樹和的根,它是正確的,其他結點都是打工仔。

遞迴下去,以子樹推當前結點和子樹的最優值,是可以辦到的

情況1:如果當前子樹<=0,就不更新

情況2:如果當前子樹》0,就更新上去。

//#pragma gcc optimize(2)

#include

//typedef long long ll;

//#define ull unsigned long long

#define int long long

#define f first

#define s second

#define endl "\n"

//<#define eps 1e-6

#define lowbit(x) (x&(-x))

#define pi acos(-1.0)

#define inf 0x3f3f3f3f

#define maxn 0x7fffffff

#define inf 0x3f3f3f3f3f3f3f3f

#define pa pair

#define ferma(a,b) pow(a,b-2)

#define pb push_back

#define all(x) x.begin(),x.end()

#define memset(a,b) memset(a,b,sizeof(a));

#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);

using

namespace std;

void

file()

const

int n=

2e4+5;

vector<

int>g[n]

;int a[n]

,dp[n]

,ans;

void

dfs(

int u,

int fat)

} ans=

max(ans,dp[u]);

}signed

main()

dfs(1,

0); cout

}

P1122 最大子樹和

小明對數學飽有興趣,並且是個勤奮好學的學生,總是在課後留在教室向老師請教一些問題。一天他早晨騎車去上課,路上見到乙個老伯正在修剪花花草草,頓時想到了乙個有關修剪花卉的問題。於是當日課後,小明就向老師提出了這個問題 一株奇怪的花卉,上面共連有nn朵花,共有n 1n 1條枝幹將花兒連在一起,並且未修剪時...

P1122 最大子樹和(樹形動態規劃)

題幹在這裡 本題老師教了我兩種方法,和大家分享一下,希望能幫到大家 第一種思路 由於每兩個點之間都有一些聯絡,我們可以先把兩兩之間的關係用邊的形式儲存下來 head x 是表示與x相連的第乙個元素的下標 edge x po是表示鏈頭為x edge x next是表述鏈頭是x,與x相連的元素的下標 運...

P1122 最大子樹和 題解

同步 原題鏈結 簡要題意 給定一棵 n nn 個節點的樹,有點權,求其中最大的連通塊之和。資料範圍 n 1.6 1 04 n leq 1.6 times 10 4 n 1.6 104.很顯然,考慮用樹形 dp text dp 解決此題。f uf u fu 表示以 u uu 為根的子樹中包含 u uu...