BZOJ 2645 陶陶吃苹果 [树形DP]
2017-07-17 11:53
330 查看
题目传送门
题解
一道树形DP SB题,vijos入门经典题,noip普及组T1前道题。#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #define N 4003 using namespace std; int dp [503][2],a ,ans; int v ,du ,n,m,sum ; inline void read(int &res){ static char ch;int flag=1; while((ch=getchar())<'0'||ch>'9')if(ch=='-')flag=-1;res=ch-48; while((ch=getchar())>='0'&&ch<='9')res=res*10+ch-48;res*=flag; } void dfsf(int x){ for(register int i=1;i<=du[x];i++) { int u=v[x][i]; sum[u]=sum[x]+a[u]; for(register int j=0;j<=m;j++)dp[u][j][0]=dp[x][j][0]; dfsf(u); for(register int j=1;j<=m;j++) dp[x][j][0]=max(dp[x][j][0],dp[u][j-1][0]+a[u]); } } void dfss(int x){ for(register int i=du[x];i>=1;i--) { int u=v[x][i]; for(register int j=0;j<=m;j++)dp[u][j][1]=dp[x][j][1]; dfss(u); for(register int j=1;j<=m;j++) dp[x][j][1]=max(dp[x][j][1],dp[u][j-1][1]+a[u]); } } int main(){ read(n),read(m); for(register int x,i=1;i<=n;i++) read(x),read(a[i]),v[x][++du[x]]=i; sum[1]=a[1],dfsf(1),dfss(1); for(register int i=1;i<=n;i++) if(du[i]==0)for(register int j=0;j<=m;j++) ans=max(ans,dp[i][j][0]+dp[i][m-j][1]+sum[i]); printf("%d\n",ans); return 0; }
相关文章推荐
- bzoj 2645: Vijos1676 陶陶吃苹果 (树形DP)
- 【虚树+树形DP】BZOJ2286(Sdoi2011)[消耗战]题解
- [容斥 状压DP 树形DP] BZOJ 4455 [Zjoi2016]小星星 & UOJ #185 【ZJOI2016】小星星
- BZOJ4890 [Tjoi2017]城市 【树形dp】
- [BZOJ 2500]幸福的道路 树形dp+单调队列+二分答案
- bzoj2152 树形DP
- [BZOJ3611][Heoi2014]大工程(虚树+树形dp)
- BZOJ5314 [Jsoi2018]潜入行动 【背包类树形dp】
- BZOJ 2152 聪聪可可 树的点分治/树形DP
- [bzoj2466][中山市选2009]树_树形dp
- [BZOJbegin][NOIP十连测第五场]Walk(数学相关+树形dp)
- BZOJ 2286 [Sdoi2011]消耗战(虚树+树形DP)
- BZOJ_1304_[CQOI2009]叶子的染色_树形DP
- BZOJ 1131: [POI2008]Sta 树形DP
- BZOJ1304 CQOI2009叶子的染色(树形dp)
- 【BZOJ-3573】米特运输 树形DP
- bzoj 1063: [Noi2008]道路设计 树形dp
- bzoj 4813: [Cqoi2017]小Q的棋盘 [树形背包dp]
- bzoj 2286: [Sdoi2011消耗战 虚树+树形dp
- 【bzoj4007】[JLOI2015]战争调度 暴力+树形背包dp