poj 2342 hdu 1520【树形dp】
给出每个顶点的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】的更多相关文章
- 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 ...
- POJ 2342 &&HDU 1520 Anniversary party 树形DP 水题
一个公司的职员是分级制度的,所有员工刚好是一个树形结构,现在公司要举办一个聚会,邀请部分职员来参加. 要求: 1.为了聚会有趣,若邀请了一个职员,则该职员的直接上级(即父节点)和直接下级(即儿子节点) ...
- HDU 1520 树形DP入门
HDU 1520 [题目链接]HDU 1520 [题目类型]树形DP &题意: 某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上司,现在已知 ...
- HDU 1520 树形dp裸题
1.HDU 1520 Anniversary party 2.总结:第一道树形dp,有点纠结 题意:公司聚会,员工与直接上司不能同时来,求最大权值和 #include<iostream> ...
- POJ 2342 - Anniversary party - [树形DP]
题目链接:http://poj.org/problem?id=2342 Description There is going to be a party to celebrate the 80-th ...
- codevs 1380/HDU 1520 树形dp
1380 没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 回到问题 题目描述 Description Ural大学有N个职员 ...
- hdu 1520 (树形DP)
dp[i][0]表示i不参加 dp[i][1]表示i参加 简单的树形dp #include<stdio.h> #include<string.h> #define N 6100 ...
- HDU - 1520 树形DP入门题
写了两种DP,第一种是按照自己习惯来xjb敲的,第二种参考别人 熟悉一下树形DP的套路 dp[i][]是维护i及以下的关系最优值的,所以我觉得两次DP记忆搜索之间不清-1应该是正确的(也就做了一次加法 ...
- hdu 1520 树形DP基础
http://acm.hdu.edu.cn/showproblem.php?pid=1520 父节点和子节点不能同时选. http://blog.csdn.net/woshi250hua/articl ...
随机推荐
- Leetcode429.N-ary Tree Level Order TraversalN叉树的层序遍历
给定一个 N 叉树,返回其节点值的层序遍历. (即从左到右,逐层遍历). 例如,给定一个 3叉树 : 返回其层序遍历: [ [1], [3,2,4], [5,6] ] 说明: 树的深度不会超过 100 ...
- TCP/TP:DNS区域(Zone)
之前阅读资料不是特别明白,看到一个博主的解释,豁然开朗,特此记录. https://blog.csdn.net/huangzx3/article/details/79347556 DNS区域(ZONE ...
- 【html、CSS、javascript-13】前端框架Bootstrap
1.Bootstrap前端框架:包含css样式.js插件.图标等 http://www.bootcss.com/ 2.Font Awesome:非常全的图标大全 https://fontawesome ...
- bzoj 2662 [BeiJing wc2012]冻结——分层图
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2662 这种的都是分层图. #include<iostream> #include ...
- 【maven】maven pom文件详解
maven pom文件详解 最近配置maven中的pom文件,maven中有些属性不太清楚,在这里记录一下 <project xmlns="http://maven.apache.or ...
- vue前后端分离
axios前后端交互 安装 一定要安装到`项目目录下 cnpm install axios 配置 在main.js中配置 //配置axios import axios from 'axios' Vue ...
- MySQL数据库起步 linux安装(更新中...)
卸载mysql! [root@localhost usr]# yum remove mysql mysql-server mysql-libs compat-mysql51 [root@localho ...
- day18 14.连接池介绍
数据源在软件编程行业有两种概念:一种数据源指的是存储数据的源头(数据库啊文件啊叫数据源),一种指的是连接池(连接池的英文单词叫做DataSource,直译就是数据源).数据源可以指数据库,也可以指连接 ...
- 2019-3-1-WPF-从零开始开发-dotnet-Remoting-程序
title author date CreateTime categories WPF 从零开始开发 dotnet Remoting 程序 lindexi 2019-03-01 09:30:45 +0 ...
- The World's Top 15 Stock Exchanges by Domestic Market Capitalization
The World's Top 15 Stock Exchanges by Domestic Market Capitalization in 2008 4 Euronext Belgium, Fr ...