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