题目链接:https://cn.vjudge.net/contest/277955#problem/A

题目大意:略

具体思路:刚开始接触树形dp,说一下我对这个题的初步理解吧,首先,我们从根节点开始,往下dfs,dp[i][0]代表我当前的i点不要去舞会,那么对于他的孩子节点,我们是肯定不能去舞会的,所以dp[i][0]=dp[i][0]+max(dp[son][0],dp[son][1])(注意一个上司可能有多个下属,所以需要累加),这个的具体意思是如果当前的父亲节点不去的话,我们可以选择他的子节点去或者不去都行,我们只需要求出一个最大的加上就可以了。dp[i][1]代表当前的i节点,我们选择去参加舞会,所以他的子节点就肯定去不了了。所以dp[i][1]=dp[i][1]+dp[son][1]. (这道题是多组输入,竟然还卡vector)

AC代码:

 #include<iostream>
#include<cmath>
#include<stack>
#include<stdio.h>
#include<algorithm>
#include<queue>
#include<vector>
#include<cstring>
using namespace std;
# define inf 0x3f3f3f3f
# define ll long long
const int maxn = +;
int dp[maxn][],cost[maxn],num;
int father[maxn],head[maxn];
struct node
{
int to;
int nex;
node() {}
node(int xx,int yy)
{
to=xx;
nex=yy;
}
} edge[maxn];
void addedge(int fr,int to){
edge[num].to=to;
edge[num].nex=head[fr];
head[fr]=num++;
}
void dfs(int t)
{
dp[t][]=;
dp[t][]=cost[t];
for(int i=head[t]; i!=-; i=edge[i].nex)
{
int u=edge[i].to;
dfs(u);
dp[t][]+=dp[u][];
dp[t][]+=max(dp[u][],dp[u][]);
}
}
int main()
{
int n;
while(~scanf("%d",&n))
{
num=;
for(int i=; i<=n; i++)
{
head[i]=-;
father[i]=i;
scanf("%d",&cost[i]);
}
int t1,t2;
for(int i=; i<=n; i++)
{
scanf("%d %d",&t1,&t2);
if(t1==&&t2==)
break;
addedge(t2,t1);
father[t1]=t2;
}
int ed=;
while(ed!=father[ed])
ed=father[ed];
dfs(ed);
printf("%d\n",max(dp[ed][],dp[ed][]));
}
return ;
}

树形dp(A - Anniversary party HDU - 1520 )的更多相关文章

  1. 树形DP+树状数组 HDU 5877 Weak Pair

    //树形DP+树状数组 HDU 5877 Weak Pair // 思路:用树状数组每次加k/a[i],每个节点ans+=Sum(a[i]) 表示每次加大于等于a[i]的值 // 这道题要离散化 #i ...

  2. POJ 2342 Anniversary party / HDU 1520 Anniversary party / URAL 1039 Anniversary party(树型动态规划)

    POJ 2342 Anniversary party / HDU 1520 Anniversary party / URAL 1039 Anniversary party(树型动态规划) Descri ...

  3. 树形dp poj2342 Anniversary party * 求最大价值

    Description There is going to be a party to celebrate the 80-th Anniversary of the Ural State Univer ...

  4. 树形DP +01背包(HDU 1011)

    题意:有n个房间,有n-1条道路连接着n个房间,每个房间都有若干个野怪和一定的能量值,有m个士兵从1房间入口进去,到达每个房间必须要留下若干士兵杀死所有的野怪,然后其他人继续走,(一个士兵可以杀死20 ...

  5. 树形dp(B - Computer HDU - 2196 )

    题目链接:https://cn.vjudge.net/contest/277955#problem/B 题目大意:首先输入n代表有n个电脑,然后再输入n-1行,每一行输入两个数,t1,t2.代表第(i ...

  6. HDU 1520.Anniversary party 基础的树形dp

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

  7. hdu 1520 Anniversary party(第一道树形dp)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1520 Anniversary party Time Limit: 2000/1000 MS (Java ...

  8. POJ 2342 &&HDU 1520 Anniversary party 树形DP 水题

    一个公司的职员是分级制度的,所有员工刚好是一个树形结构,现在公司要举办一个聚会,邀请部分职员来参加. 要求: 1.为了聚会有趣,若邀请了一个职员,则该职员的直接上级(即父节点)和直接下级(即儿子节点) ...

  9. HDU 1520 Anniversary party [树形DP]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 题目大意:给出n个带权点,他们的关系可以构成一棵树,问从中选出若干个不相邻的点可能得到的最大值为 ...

随机推荐

  1. Android Studio系列教程

    Android Studio系列教程 Android Studio系列教程一 —- 下载与安装 Android Studio系列教程二 —- 基本设置与运行 Android Studio系列教程三 — ...

  2. BZOJ3246 IOI2013Dreaming

    如果将森林里每棵树都各自看做一个点,那么最后所连成的树应该是一颗菊花,否则将叶子节点父亲改为根不会更劣. 对于每个点所代表的树,其和根节点相连的点应该是到其他点距离最大值最小的点.这个点显然是直径的中 ...

  3. P3119 [USACO15JAN]草鉴定Grass Cownoisseur

    题目描述 In an effort to better manage the grazing patterns of his cows, Farmer John has installed one-w ...

  4. python操作mysql实例

    #coding=utf-8 import MySQLdb # 打开数据库连接 db = MySQLdb.connect(host='localhost',user='root',passwd='',d ...

  5. The Bells are Ringing UVALive - 4060(枚举求解)

    输出整数N,使得  t1 <= N  统计有多少组t1,t2,t3,满足:1<t1<t2<t3<=1000000,t3-t1<=25,且t1,t2,t3的最小公倍数 ...

  6. eclispe 出现超内存错误

    刚开始以为只要修改tomcat的最大最小内存就可以,结果还是报错,后来才懂需要在eclipse.ini文件中修改 -Xms256m-Xmx512m的值改大些,增加虚拟机运行的内存空间 刚开始最小值只有 ...

  7. 《Linux内核分析》期末总结及学习心得

    [洪韶武 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ] 一.学习心得 本学 ...

  8. android 布局的两个属性 dither 和 tileMode

    tileMode(平铺)tileMode(平铺) 的效果类似于 让背景小图不是拉伸而是多个重复(类似于将一张小图设置电脑桌面时的效果) dither(抖动) Dither(图像的抖动处理,当每个颜色值 ...

  9. 解题:USACO13NOV No Change

    题面 在朴素中透着一点新意的状压DP 一个很暴力的思路是枚举位置,状态和硬币,每次二分出向前最多能买到哪里,复杂度爆炸($O(2^knklog$ $n)$) 考虑优化,不妨先预处理一下$goal[i] ...

  10. vue的全局指令

    vue有四个全局指令:directive.extent.set.component directive:自定义指令 //写一个改变颜色的指令 Vue.directive('amie',function ...