poj 2342

给出每个顶点的happy值,还有若干组两个顶点L,K关系,表示K是L的上司。求当K、L不同时出现时获得的happy值的最大和。

设dp[u][0]表示不选u结点时获得的最大值,dp[u][1]表示选u结点时获得的最大值。则有:

   dp[u][0]+=max(dp[v][0],dp[v][1]),dp[u][1]+=dp[v][0](u为v的父节点)

当父亲节点用有向边连向子节点时,会形成一颗树,自然就只有一个根。那么从根开始dfs就行了。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn = ;
int dp[maxn][], vis[maxn], a[maxn];
vector<int> tree[maxn];
int N; void Init()
{
for (int i = ; i <= N; i++) {
cin >> a[i];
tree[i].clear(), vis[i] = ;
}
int L, K;
while (cin>>L>>K)
{
if (L == && K == ) break;
tree[K].push_back(L);
vis[L] = ;
}
tree[].clear();//找根
for(int i=;i<=N;i++)
if (!vis[i]) {
tree[].push_back(i);
break;//只有一个根,找到后就break
}
} void dfs(int u)
{
dp[u][] = ;
dp[u][] = a[u];
for (int i = ; i < tree[u].size(); i++)
{
int v = tree[u][i];
dfs(v);
dp[u][] += max(dp[v][], dp[v][]);
dp[u][] += dp[v][];
}
} void Solve()
{
int root = tree[][];
dfs(root);
cout << max(dp[root][], dp[root][]) << endl;
} int main()
{
while (cin>>N)
{
Init();
Solve();
}
return ;
}
 #include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn=;
int dp[maxn][],rat[maxn],f[maxn],vis[maxn];
vector<int> tree[maxn]; void dfs(int u)
{
vis[u]=;
dp[u][]=;
dp[u][]=rat[u];
int len=tree[u].size();
for(int i=;i<len;i++){
int v=tree[u][i];
if(vis[v]) continue;
dfs(v);
dp[u][]+=max(dp[v] [],dp[v][]);
dp[u][]+=dp[v][];
}
} int main()
{
int N;
while(scanf("%d",&N)==)
{
for(int i=;i<=N;i++){
scanf("%d",&rat[i]);
vis[i]=;f[i]=-;
tree[i].clear();
}
int a,b;
while(scanf("%d%d",&a,&b))
{
if(a==&&b==) break;
f[a]=b;
tree[b].push_back(a);
}
int root;
for(int i=;i<=N;i++){
if(f[i]==-){
root=i;
break;
}
}
dfs(root);
cout<<max(dp[root][],dp[root][])<<endl;
}
return ;
}

又写了一遍

poj 2342 hdu 1520【树形dp】的更多相关文章

  1. 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 ...

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

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

  3. HDU 1520 树形DP入门

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

  4. HDU 1520 树形dp裸题

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

  5. POJ 2342 - Anniversary party - [树形DP]

    题目链接:http://poj.org/problem?id=2342 Description There is going to be a party to celebrate the 80-th ...

  6. codevs 1380/HDU 1520 树形dp

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

  7. hdu 1520 (树形DP)

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

  8. HDU - 1520 树形DP入门题

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

  9. hdu 1520 树形DP基础

    http://acm.hdu.edu.cn/showproblem.php?pid=1520 父节点和子节点不能同时选. http://blog.csdn.net/woshi250hua/articl ...

随机推荐

  1. Leetcode238. Product of Array Except Self除自身以外数组的乘积

    给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积. 示例: 输入: [1 ...

  2. spring源码学习之容器的扩展(二)

    六 BeanFactory的后处理BeanFactory作为spring容器的基础,用于存放所有已经加载的bean,为了保证程序上的高扩展性,spring针对BeanFactory做了大量的扩展,比如 ...

  3. TZ_01MyBatis_log4j.propertiies

    # Set root category priority to INFO and its only appender to CONSOLE. #log4j.rootCategory=INFO, CON ...

  4. 微信小程序示例

    http://www.cnblogs.com/ihardcoder/p/6097941.html http://www.wxapp-union.com/ http://blog.csdn.net/li ...

  5. PHP--http_build_query--把数组化成&key=value方式

  6. ifconfig命令为centos linux系统配置临时的局域名IP、网关以及子网掩码

    ifconfig eth0 192.168.1.25 netmask 255.255.255.0 broadcast 192.168.1.1 up netmask:子网掩码broadcast:默认网关

  7. python基--re模块的使用

    正则表达式: 正则表达式本身是一种小型的.高度专业化的编程语言,然而在python中,通过内嵌集成re模块让调用者们可以直接调用来实现正则匹配.正则表达模式被变异成一系列的字节码,然后由C语言编写的 ...

  8. 【CODEVS】倒水问题

    题目描述: 有两个无刻度标志的水壶,分别可装 x 升和 y 升 ( x,y 为整数且均不大于 100 )的水.设另有一水 缸,可用来向水壶灌水或接从水壶中倒出的水, 两水壶间,水也可以相互倾倒.已知 ...

  9. Hdu 2389 二分匹配

    题目链接 Rain on your Parade Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 655350/165535 K (Ja ...

  10. css3烟花效果

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...