http://acm.hdu.edu.cn/showproblem.php?pid=1520

父节点和子节点不能同时选。

http://blog.csdn.net/woshi250hua/article/details/7641589

首先是建树,这个在之前的树形背包里有讲:http://www.cnblogs.com/qlky/p/5650783.html

因为这里没有指定根节点,所以可以建双向边,这样就可以从任一个点出发遍历

接下来是DP,状态转移方程:

dp[fa][0] += max(dp[son][0]+dp[son][1])

dp[fa][1] += dp[son][0]

#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <stack>
#include <queue>
#include <cctype>
#include <vector>
#include <iterator>
#include <set>
#include <map>
#include <sstream>
using namespace std; #define mem(a,b) memset(a,b,sizeof(a))
#define pf printf
#define sf scanf
#define spf sprintf
#define pb push_back
#define debug printf("!\n")
#define MAXN 20000+5
#define MAX(a,b) a>b?a:b
#define blank pf("\n")
#define LL long long
#define ALL(x) x.begin(),x.end()
#define INS(x) inserter(x,x.begin())
#define pqueue priority_queue
#define INF 0x3f3f3f3f #define ls (rt<<1)
#define rs (rt<<1|1) int n,m; int ptr = ,head[MAXN],a[MAXN],dp[MAXN][],vis[MAXN]; struct node
{
int y,val,next;
}tree[MAXN]; void add(int fa,int son)
{
tree[ptr].y = son;
tree[ptr].next = head[fa];
head[fa] = ptr++;
} void dfs(int root)
{
vis[root] = ;
dp[root][] = a[root];
dp[root][] = ;
for(int i=head[root];i!=-;i=tree[i].next)
{
int y = tree[i].y;
if(vis[y]) continue;
dfs(tree[i].y);
dp[root][] += max(dp[y][],dp[y][]);
dp[root][] += dp[y][];
}
} int main()
{
int i,j,t,kase=;
while(~sf("%d",&n))
{
mem(a,);
mem(vis,);
mem(dp,);
mem(head,-);
ptr = ;
for(i=;i<=n;i++) sf("%d",&a[i]);
int x,y;
while(sf("%d%d",&x,&y),x+y)
{
add(y,x);
add(x,y);
}
dfs();
pf("%d\n",max(dp[][],dp[][])); }
return ;
}

hdu 1520 树形DP基础的更多相关文章

  1. HDU 1520 树形dp裸题

    1.HDU 1520  Anniversary party 2.总结:第一道树形dp,有点纠结 题意:公司聚会,员工与直接上司不能同时来,求最大权值和 #include<iostream> ...

  2. HDU 1520 树形DP入门

    HDU 1520 [题目链接]HDU 1520 [题目类型]树形DP &题意: 某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上司,现在已知 ...

  3. codevs 1380/HDU 1520 树形dp

    1380 没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 回到问题 题目描述 Description Ural大学有N个职员 ...

  4. hdu 1520 (树形DP)

    dp[i][0]表示i不参加 dp[i][1]表示i参加 简单的树形dp #include<stdio.h> #include<string.h> #define N 6100 ...

  5. HDU - 1520 树形DP入门题

    写了两种DP,第一种是按照自己习惯来xjb敲的,第二种参考别人 熟悉一下树形DP的套路 dp[i][]是维护i及以下的关系最优值的,所以我觉得两次DP记忆搜索之间不清-1应该是正确的(也就做了一次加法 ...

  6. poj 2342 && hdu 1520 树形dp

    题意:有n个人,接下来n行是n个人的价值,再接下来n行给出l,k说的是l的上司是k,这里注意l与k是不能同时出现的 链接:点我 dp[i][1] += dp[j][0], dp[i][0] += ma ...

  7. hdu 4123 树形DP+RMQ

    http://acm.hdu.edu.cn/showproblem.php? pid=4123 Problem Description Bob wants to hold a race to enco ...

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

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

  9. hdu 1561 The more, The Better(树形dp,基础)

    The more, The Better Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

随机推荐

  1. JavaScript学习笔记——2.数据类型与类型转换

    数据类型 JS中一共分成六种数据类型 1- String 字符串 2- Number 数值 3- Boolean 布尔值 4- Null 空值 5- Undefined 未定义 6- Object 对 ...

  2. MongoDB集群配置笔记

    firewall-cmd --query-port=27017/tcp yum install system-config-firewall-tui firewall-cmd --zone=publi ...

  3. POJ-1321-棋盘问题(深搜)

    棋盘问题 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 65409   Accepted: 31227 Descriptio ...

  4. 使用SWig出现调用异常的情况

    未经处理的异常:  System.TypeInitializationException: "Win32Project1PINVOKE"的 类型初始值设定项引发异常. ---> ...

  5. TX1 文字界面启动与root用户自动登录设置

    设置默认文字启动界面 更改/boot/extlinux/extlinux.conf文件,在最后一行的末尾添加 text. 设置自动登录 在/etc/init/tty1.conf文件末尾添加: exec ...

  6. Luogu P1282 多米诺骨牌 DP。。背包?

    背包...差不多..QWQ 设f[i]为达到差值为i的状态需要多少次,那就很显然了: 注意区分正负不同的代价的循环方向 技巧:如果不想改负数的话,那可以移动一下数组下标,用一个新的指针指向原来的数组 ...

  7. 格子刷油漆(dp)-----------蓝桥备战系列

    标题:格子刷油漆 X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如图1所示),现需要把这些格子刷上保护漆. 你可以从任意一个格子刷起,刷完一格,可以移动到和它相邻的格子(对角相邻也算数),但 ...

  8. 云服务的三种形式laas,paas,saas

    “云”其实是互联网的一个隐喻,“云计算”其实就是使用互联网来接入存储或者运行在远程服务器端的应用,数据,或者服务. 云也是分层的 任何一个在互联网上提供其服务的公司都可以叫做云计算公司.其实云计算分几 ...

  9. intelliJ idea像eclipse一样在class中断点调试

    安装插件 Bytecode Viewwe Java Bytecode Decompiler

  10. Python 中下划线的 5 种含义

    详细请参考这篇文章 单前导下划线:_var 单末尾下划线:var_ 双前导下划线:__var 双前导和末尾下划线:__var__ 单下划线:_