HDU1502/Luogu1352/UVa1220 party[树形DP]
题目描述
某大学有N个职员,编号为1~N。他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri,但是呢,如果某个职员的上司来参加舞会了,那么这个职员就无论如何也不肯来参加舞会了。所以,请你编程计算,邀请哪些职员可以使快乐指数最大,求最大的快乐指数。
输入输出格式
输入格式:
第一行一个整数N。(1<=N<=6000)
接下来N行,第i+1行表示i号职员的快乐指数Ri。(-128<=Ri<=127)
接下来N-1行,每行输入一对整数L,K。表示K是L的直接上司。
最后一行输入0 0
输出格式:
输出最大的快乐指数。
输入输出样例
7
1
1
1
1
1
1
1
1 3
2 3
6 4
7 4
4 5
3 5
0 0
5
-------------------------------------------
最基础的树形DP
f[i][0]表示不选以i为根的子树不选i,f[i][1]选i
其实不一定按子树划分,只要分成一些连通块就行了
【关于树】:用了邻接链表,用vector存孩子也可以
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=;
int n,l,k,r[N];
struct edge{
int ne,v;
}e[N];
int h[N],cnt=;
void ins(int f,int s){
cnt++;
e[cnt].v=s; e[cnt].ne=h[f]; h[f]=cnt;
}
int f[N][];
int dp(int i,int flag){
int &ans=f[i][flag];
if(ans!=-) return ans;
ans=;
for(int j=h[i];j;j=e[j].ne){
int v=e[j].v;
if(flag==) ans+=max(dp(v,),dp(v,));
if(flag==) ans+=dp(v,);
}
if(flag==) ans+=r[i];
return ans;
}
bool son[N];int root=-;
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&r[i]);
for(int i=;i<=n-;i++){
scanf("%d%d",&l,&k);
ins(k,l);son[l]=;
}
memset(f,-,sizeof(f));
for(int i=;i<=n;i++) if(son[i]==){root=i;break;}
cout<<max(dp(root,),dp(root,));
}
HDU1502/Luogu1352/UVa1220 party[树形DP]的更多相关文章
- C++ luogu1352没有上司的舞会 from_树形DP
luogu1352没有上司的舞会 分析(树形DP模板题): 没学树形DP的,看一下. 把该题抽象到一颗树中,设i的下属就是他的儿子,则有两种情况: 如果i参加,他的儿子就不能参加. 如果i不参加,他的 ...
- 再谈树形dp
上次说了说树形dp的入门 那么这次该来一点有难度的题目了: UVA10859 Placing Lampposts 给定一个n个点m条边的无向无环图,在尽量少的节点上放灯,使得所有边都与灯相邻(被灯照亮 ...
- 浅说——树形DP
啊!DP! 顾名思义,树形DP就是在树上所做的动态规划.我们一般所做的动态规划多是线性的,线性DP我们可以从前向后或从后向前两种方法,不妨类比一下,在树上我们同样可以有两种方法,从根向树叶或者从树叶向 ...
- poj3417 LCA + 树形dp
Network Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4478 Accepted: 1292 Descripti ...
- COGS 2532. [HZOI 2016]树之美 树形dp
可以发现这道题的数据范围有些奇怪,为毛n辣么大,而k只有10 我们从树形dp的角度来考虑这个问题. 如果我们设f[x][k]表示与x距离为k的点的数量,那么我们可以O(1)回答一个询问 可是这样的话d ...
- 【BZOJ-4726】Sabota? 树形DP
4726: [POI2017]Sabota? Time Limit: 20 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 128 Solved ...
- 树形DP+DFS序+树状数组 HDOJ 5293 Tree chain problem(树链问题)
题目链接 题意: 有n个点的一棵树.其中树上有m条已知的链,每条链有一个权值.从中选出任意个不相交的链使得链的权值和最大. 思路: 树形DP.设dp[i]表示i的子树下的最优权值和,sum[i]表示不 ...
- 树形DP
切题ing!!!!! HDU 2196 Anniversary party 经典树形DP,以前写的太搓了,终于学会简单写法了.... #include <iostream> #inclu ...
- BZOJ 2286 消耗战 (虚树+树形DP)
给出一个n节点的无向树,每条边都有一个边权,给出m个询问,每个询问询问ki个点,问切掉一些边后使得这些顶点无法与顶点1连接.最少的边权和是多少.(n<=250000,sigma(ki)<= ...
随机推荐
- js、jquery获取当前url中各个参数
首先,先把获取各参数的方式再写一遍,相信大家都耳熟能详,就写几个常用的吧. 以此网址https://i.cnblogs.com/EditPosts.aspx?opt=1为例: 1. var url=w ...
- Autodesk 360 Mobile不能显示图片?
在6月21号的DevLab上,有一位朋友说Autodesk 360 Mobile在iPad上不能显示JPG图片预览.我当时没带iPad,不能测试.后天回家在Autodesk 360 Mobile 3. ...
- Java---Condition控制线程通信
java中控制线程通信的方法有:1.传统的方式:利用synchronized关键字来保证同步,结合wait(),notify(),notifyAll()控制线程通信.不灵活. 2.利用Conditio ...
- Android-Universal-Image-Loader 框架使用
1.Android-Universal-Image-Loader github下载地址 https://github.com/nostra13/Android-Universal-Image ...
- IOS 四舍五入 进一法 去尾法
float numberToRound; int result; numberToRound = 4.51; result = (int)roundf(numberToRound); NSLog(@& ...
- iOS xcode使用断点追踪后,无法nslog,无法po对应的值 方法小结
今天使用断点追踪后,发现无法正常nslog,使用po也无法打印出对应的值,进入断点显示的值都为nil,网上查了一下,我总结出了以下几个可行方法: 法一:项目根目录->PROGECT->Bu ...
- 在eclipse中把之前的Tomcat 6删掉,不能再建
在eclipse中把之前的Tomcat 6删掉,重新配置一个,不料没有下一步. 解决的方法了,如下: 1.退出 eclipse 2.到[工程目录下]/.metadata/.plugins/org.ec ...
- 一次对MKMapView的性能优化
一次对MKMapView的性能优化 前言 最近做的项目主要是LBS这块 主打成员定位功能 我们的UI设计是这样的 乍一看上去是挺好挺美观的 不同的人会显示不同的头像 可是当人扎堆的时候 问题就来了 当 ...
- Oracle与MySQL的区别
1. Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高. 2. Oracle支持大并发,大访 ...
- C文件编译、链接指令
通过mac终端 输入指令: cc -c 文件名.c 可以把C文件编译成.o文件(其实是2进制文件) 然后通过指令 cc 文件名.o 把.o文件链接C文件所需要的C语言的底层库,成为可以直接运行的lin ...