标签:splay not temp after isp 技术分享 pac his for
7 1 1 1 1 1 1 1 1 3 2 3 6 4 7 4 4 5 3 5 0 0Sample Output
5
树形dp,用邻接表存树,先把左右儿子解决了 然后再更新自己。
代码:
#include <iostream> #include <cstring> #include <cstdio> #define Max 6001 using namespace std; int n,l[Max],k[Max]; int rating[Max],fir[Max],nex[Max],vis[Max]; int dp[2][Max]; void dfs(int d) { int kk = fir[d]; while(kk != -1) { dfs(l[kk]); dp[0][d] += max(dp[0][l[kk]],dp[1][l[kk]]);///当前点不出席的话 他的下一级出不出都可以 dp[1][d] += dp[0][l[kk]];///他出席 下一级就不能出席 kk = nex[kk]; } dp[1][d] += rating[d];///出席需要加上rating } int main() { while(~scanf("%d",&n)) { for(int i = 1;i <= n;i ++) scanf("%d",&rating[i]); memset(fir,-1,sizeof(fir)); memset(dp,0,sizeof(dp)); int i = 0; while(~scanf("%d%d",&l[i],&k[i]) && l[i] && k[i]) { vis[l[i]] = 1; nex[i] = fir[k[i]]; fir[k[i]] = i; i ++; } for(i = 1;i <= n;i ++) { if(!vis[i]) { dfs(i); cout<<max(dp[0][i],dp[1][i])<<endl; } vis[i] = 0; } } }
标签:splay not temp after isp 技术分享 pac his for
原文地址:https://www.cnblogs.com/8023spz/p/9061406.html