小白算法练习 树状dp POJ anniversary party
来源:互联网 发布:淘宝滑动验证码 编辑:程序博客网 时间:2024/06/05 20:38
Anniversary party
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 9493 Accepted: 5464
Description
There is going to be a party to celebrate the 80-th Anniversary of the Ural State University. The University has a hierarchical structure of employees. It means that the supervisor relation forms a tree rooted at the rector V. E. Tretyakov. In order to make the party funny for every one, the rector does not want both an employee and his or her immediate supervisor to be present. The personnel office has evaluated conviviality of each employee, so everyone has some number (rating) attached to him or her. Your task is to make a list of guests with the maximal possible sum of guests' conviviality ratings.
Input
Employees are numbered from 1 to N. A first line of input contains a number N. 1 <= N <= 6 000. Each of the subsequent N lines contains the conviviality rating of the corresponding employee. Conviviality rating is an integer number in a range from -128 to 127. After that go N – 1 lines that describe a supervisor relation tree. Each line of the tree specification has the form:
L K
It means that the K-th employee is an immediate supervisor of the L-th employee. Input is ended with the line
0 0
L K
It means that the K-th employee is an immediate supervisor of the L-th employee. Input is ended with the line
0 0
Output
Output should contain the maximal sum of guests' ratings.
Sample Input
711111111 32 36 47 44 53 50 0
Sample Output
5
#include<iostream>#include<algorithm>#include<cstring>#include<vector>using namespace std;const int Max=6008;vector<int>vec[Max];int N;int value[Max];int vis[Max];int root[Max];int dp[Max][2]; void init(){for(int i=1;i<=N;i++){scanf("%d",&value[i]);}int f,e;while(scanf("%d%d",&f,&e)!=EOF && f!=0 && e!=0){vec[e].push_back(f);vis[f]=1; //如果是下属则置1}for(int i=1;i<=N;i++)//找根{if(vis[i]!=1){vec[0].push_back(i);//根节点 有可能有多个根 比如有多个经理 }}}void dfs(int rt){dp[rt][0]=0;dp[rt][1]=value[rt];for(int i=0;i<vec[rt].size();i++){dfs(vec[rt][i]);dp[rt][0]+=max(dp[vec[rt][i]][0],dp[vec[rt][i]][1]);dp[rt][1]+=dp[vec[rt][i]][0];}}void solve(){int ans=0;for(int i=0;i<vec[0].size();i++) //把所有根得到的结果加起来{dfs(vec[0][i]);ans+=max(dp[vec[0][i]][0],dp[vec[0][i]][1]);}printf("%d\n",ans);}int main(){ while(scanf("%d", &N) != EOF) {for(int i=0;i<Max;i++) vec[i].clear();memset(value,0,sizeof(value));memset(vis,0,sizeof(vis));memset(dp,0,sizeof(dp)); init(); solve(); } return 0;}
阅读全文
0 0
- 小白算法练习 树状dp POJ anniversary party
- POJ 2342 Anniversary party(树状DP)
- 树状dp Anniversary party
- poj Anniversary party (树形DP)
- HDU 1520 Anniversary party树状DP
- HDU 1520 Anniversary party 简单树状DP
- HDU 1520 Anniversary party (树状dp)
- HDU 1520 Anniversary party (树状DP)
- POJ2342 Anniversary party(树状DP)
- hdu 1520 Anniversary party 树状dp
- HDU 1520-Anniversary party(树状DP入门)
- poj 2342 Anniversary party 简单的DP
- poj 2342 Anniversary party 树形DP
- poj 2342 Anniversary Party(树形dp)
- POJ-2342 Anniversary party(Tree dp)
- POJ 2342 Anniversary party(树形DP)
- poj 2342 Anniversary party 简单树形dp
- poj 2342 Anniversary party,树形DP easy
- 新手看JAVA异常处理机制
- 如何在 Kaggle 首战中进入前 10%
- error: expected ';', ',' or ')' before '&' token 解决方法
- JavaWeb路径问题
- vue2.0音乐app项目笔记
- 小白算法练习 树状dp POJ anniversary party
- Java智能计算
- shadertoy上手指南
- 形形色色的线段树练习——codevs线段树练习1-5:线段树,树状数组及分块模板
- struts2拦截器的实现原理及源码解析
- 【第三周】项目1-顺序表的基本运算
- MnistData的读取
- 考试总结1
- 游戏中纹理压缩格式之Texture压缩纹理特殊处理