Anniversary party

HDU - 1520

题意:你要举行一个晚会,所有人的关系可以构成一棵树,要求上下级关系的人不能同时出现,每一个人都有一个rating值,要求使整个晚会的rating值最大。

/*
解题思路:树形dp,随意从一个点开始扩展,把周围所有节点的dp都解决出来,然后加上去即可。
用dp[i][0]表示不选中i号,周围的都可以选的最大值,dp[i][1]表示选中i号,那么周围都不能选的最大值。

dp[i][0]+=(dp[j][1],dp[j][0])
dp[i][1]+=dp[j][0]
i和j相邻,并且在求i的时候从j扩展的都已经求出来。
*/
#include<cstdio>
#include<iostream>
#include<vector>
#include<string.h>
using namespace std;
#define Max(a,b) a>b?a:b
vector<int> q[];
int visit[],rating[],dp[][];
void dfs(int r)
{
//printf("r=%d\n",r);
int i,v;
visit[r]=;
if(q[r].size()==)
{
dp[r][]=rating[r];
dp[r][]=;
}
int dp1=,dp0=;
for(i=;i<q[r].size();i++)
{
v=q[r][i];
if(!visit[v])
{
//printf("v=%d ",v);
dfs(v);
}
dp1+=dp[v][];//若选了此节点,则孩子都不能选
dp0+=Max(dp[v][],dp[v][]);//若不选此节点,则孩子可选可不选
}
dp[r][]=dp1+rating[r];
dp[r][]=dp0;
}
int main()
{
int n,root;
int i,j,k;
while(~scanf("%d",&n))
{
for(i=;i<=n;i++)
q[i].clear();
for(i=;i<=n;i++)
scanf("%d",&rating[i]);
memset(visit,,sizeof(visit));
int c,f;
root=;
while(scanf("%d%d",&c,&f),c||f)
{
if(c==root)
root=f;//新学习的一个寻根的小技巧
q[f].push_back(c);
}
dfs(root);
printf("%d\n",Max(dp[root][],dp[root][]));
}
return ;
}

hdu1520 Anniversary party的更多相关文章

  1. HDU1520 Anniversary party 树形DP基础

    There is going to be a party to celebrate the 80-th Anniversary of the Ural State University. The Un ...

  2. HDU1520 Anniversary party —— 树形DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 Anniversary party Time Limit: 2000/1000 MS (Java ...

  3. hdu1520 Anniversary party (树形dp)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1520题意:上司和直系下属不能同时参加party,求party的最大活跃值.输入: 输入n个 ...

  4. HDU-1520 Anniversary party(树形DP)

    题目大意:一棵树,每个节点都带权.从中取出一些节点,并且子节点不能与父节点同时取,求能取得的最大值. 题目分析:定义状态dp(u,0/1)表示u点不取/取.则状态转移方程为: dp(u,1)=sum( ...

  5. hdu1520 Anniversary party 简单树形DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 思路:树形DP的入门题 定义dp[root][1]表示以root为根节点的子树,且root本身参 ...

  6. 树状DP HDU1520 Anniversary party

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 题意:职员之间有上下级关系,每个职员有自己的happy值,越高在派对上就越能炒热气氛.但是必须是 ...

  7. 【树形dp小练】HDU1520 HDU2196 HDU1561 HDU3534

    [树形dp]就是在树上做的一些dp之类的递推,由于一般须要递归处理.因此平庸情况的处理可能须要理清思路.昨晚開始切了4题,作为入门训练.题目都很easy.可是似乎做起来都还口以- hdu1520 An ...

  8. hdu1520 树形dp Anniversary party

    A - Anniversary party Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I6 ...

  9. Anniversary party(hdu1520)

    Anniversary party Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

随机推荐

  1. ABAP excel操作 OLE 常用方法和属性

    转自 http://bstone.blog.163.com/blog/static/176820446201172834149199/#userconsent# OLE 常用方法和属性 1.ole中如 ...

  2. perl之创建临时文件夹遇到同名文件该咋办

    当你在目录下进行一系列操作时,若要创建许多文件或者修改文件,可能会遇到许多麻烦的事.所以呢,新建一个文件夹,然后在这个文件夹下新建文件或者修改文件.假设,你的代码要在一个目录下新建一个文件夹,名为Tm ...

  3. Tomcat 开启远程调试

    根据 Tomcat 启动方式在 catalina.sh 或者 startup.sh 添加一下内容 $TOMCAT_HOME/bin/catalina.sh 添加 CATALINA_OPTS=" ...

  4. 《程序员代码面试指南》第八章 数组和矩阵问题 找到无序数组中最小的k 个数

    题目 找到无序数组中最小的k 个数 java代码 package com.lizhouwei.chapter8; /** * @Description: 找到无序数组中最小的k 个数 * @Autho ...

  5. 素数筛总结篇___Eratosthenes筛法和欧拉筛法(*【模板】使用 )

    求素数 题目描述 求小于n的所有素数的数量. 输入 多组输入,输入整数n(n<1000000),以0结束. 输出 输出n以内所有素数的个数. 示例输入 10 0 示例输出 4 提示 以这道题目为 ...

  6. IDEAL葵花宝典:java代码开发规范插件 (maven helper)解决maven 包冲突的问题

    小编说到: 在我们日常开发当中常常我们会遇到JAR包冲突.找来找去还找不到很是烦人.那么所谓的JAR包冲突是指的什么那?JAR包冲突就是-引入的同一个JAR包却有好几个版本. 例如: 项目中引用了两个 ...

  7. CF Round #459

    好菜啊 第一场cf就菜成这样...mdzz 可能是我把题看的太简单了吧... T1AC T2AC T3WA T4看错题 T5不会写 T3想的是栈+暴力 正解:  对于一个pretty串的任意一个位置, ...

  8. asm 兼容性、asm 主要参数管理

    一 ASM instance 与 Database instance 的版本兼容性说明 1. Oracle 11gR2 的ASM 支持11g和10g的数据库实例.但是在Oracle Clusterwa ...

  9. bzoj 5281 [Usaco2018 Open]Talent Show——0/1分数规划

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5281 把分子乘1000,就能在整数里做了. 这种水题也花了这么久…… #include< ...

  10. fabric添加多主机ssh互信

    最近折腾fabric,把服务器ssh互信用fabric写了一遍,单向互信,master可以无密码访问client,具体如下: 执行:fab  -f ./copyrsa.py allsshkey 即可, ...