第一次寫樹形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...