HDU 1520 Anniversary party 树形dp 入门
2016-05-26 20:32
513 查看
输入n个结点,接下去的n行,表示1-n的每个结点分别具有的活跃值,在接下来去的n-1行,输入a,b,表示b是a的上司
输出:
由于直接有上司和下属关系的两个人不能同时参加party, 求出能让party活跃值最大的方案(求出最大的活跃值即可).
这是一个有向树。
每个结点有两种状态,参加和不参加,用0表示不参加,1表示参加
dp[i][1]表示第i个参与者参加了,dp[i][0]表示第i个参与者没有参加。
状态转移方程:dp[u][0] += max (dp[v][0], dp[v][1]) :表示上司没参加,其员工可以参加可以不参加
dp[u][1] += dp[v][0] : 表示若上司参加了,其员工一定不会参加
输出:
由于直接有上司和下属关系的两个人不能同时参加party, 求出能让party活跃值最大的方案(求出最大的活跃值即可).
这是一个有向树。
每个结点有两种状态,参加和不参加,用0表示不参加,1表示参加
dp[i][1]表示第i个参与者参加了,dp[i][0]表示第i个参与者没有参加。
状态转移方程:dp[u][0] += max (dp[v][0], dp[v][1]) :表示上司没参加,其员工可以参加可以不参加
dp[u][1] += dp[v][0] : 表示若上司参加了,其员工一定不会参加
#include <cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<map> #include<cmath> #include<cstdlib> #include<vector> #define LL unsigned long long #define bug puts("***********") #define INF 0x3f3f3f3f using namespace std; vector<int>vec[6010]; int dp[6010][2]; int val[6100]; int vis[6100]; int DFS(int x) { if(vis[x]) return max(dp[x][0],dp[x][1]); int sum=0; dp[x][0]=0; dp[x][1]=val[x]; vis[x]=1; for(int i=0;i<vec[x].size();i++) { DFS(vec[x][i]); dp[x][0]+=max(dp[vec[x][i]][0],dp[vec[x][i]][1]); dp[x][1]+=dp[vec[x][i]][0]; } return max(dp[x][0],dp[x][1]); } int main() { int n; while(~scanf("%d",&n)) { memset(vec,0,sizeof(vec)); memset(vis,0,sizeof(vis)); memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) scanf("%d",&val[i]); int x,y; while(scanf("%d%d",&x,&y),x+y) { vec[y].push_back(x); } int sum=0; for(int i=1;i<=n;i++) sum=max(sum,DFS(i)); printf("%d\n",sum); } return 0; }
相关文章推荐
- 轻量web服务器开发日记09-日志文件的实现
- 当子查询碰上NULL
- mybatis系列-13-resultMap总结
- 当子查询碰上NULL
- unity路径跟随的算法
- sqoop 在hbase运行时出现job: java.io.IOException: java.lang.reflect.InvocationTargetException解决办法
- Linux C++ 开发简介(包括Linux守护线程)
- 团队第二次冲刺02(5.26)
- html body标签的几个属性 禁用鼠标右键,禁用鼠标选中文字等
- C++的一些简单示例(2)
- android BLE从入门到精通开发2
- Create a hollowed triangle with SVG
- hdu 3790 最短路径问题
- android 沉浸式状态栏(像ios那样的状态栏与应用统一颜色样式)
- 背包问题模板,POJ(1014)
- 磁盘测速工具汇总
- Larmes琅幕仕家居马头长款短柄自动雨伞 晴雨两用太阳伞防紫外线遮阳男士商务伞 雨伞雨具 骏马长款-金色配饰【图片 价格 品牌 报价】-京东
- 123sdfdsfdsfsdf
- for循环的写法
- EAS KDTable 判断点击的是表头