P1122 最大子樹和 題解

2022-02-14 15:24:17 字數 897 閱讀 7582

csdn同步

原題鏈結

簡要題意:

給定一棵 \(n\) 個節點的樹,有點權,求其中最大的連通塊之和。

資料範圍:\(n \leq 1.6 \times 10^4\).

很顯然,考慮用樹形 \(\text\) 解決此題。

\(f_u\) 表示以 \(u\) 為根的子樹中包含 \(u\) 節點的答案。

則易得:

\[f_u = a_u + \max_(u)} \max(f_v , 0)

\]時間複雜度:\(\mathcal(n)\).

實際得分:\(100pts\).

#pragma gcc optimize(2)

#includeusing namespace std;

const int n=1.6e4+1;

inline int read()

int x=0; while(ch>='0' && ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar(); return x*f;}

inline void write(int x)

if(x<10)

write(x/10);putchar(char(x%10+'0'));

}int n,a[n],f[n];

vectorg[n];

int ans=-(1<<31);

inline void dfs(int u,int fa)

}int main() dfs(1,0);

for(int i=1;i<=n;i++) ans=max(ans,f[i]);

printf("%d\n",ans);

return 0;

}

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...

P1122 最大子樹和

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

P1122 最大子樹和 (樹形DP)

第一次寫樹形dp,找了乙個簡單的題,先熟悉一下套路,雖然自己的這種寫法,過了,可以求到最大的子樹和,但是不能求到每個結點的最大子樹和,只有某一部分的最大子樹和的根,它是正確的,其他結點都是打工仔。遞迴下去,以子樹推當前結點和子樹的最優值,是可以辦到的 情況1 如果當前子樹 0,就不更新 情況2 如果...