P1352 没有上司的舞会

题目描述

某大学有N个职员,编号为1~N。他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri,但是呢,如果某个职员的上司来参加舞会了,那么这个职员就无论如何也不肯来参加舞会了。所以,请你编程计算,邀请哪些职员可以使快乐指数最大,求最大的快乐指数。

输入输出格式

输入格式:

第一行一个整数N。(1<=N<=6000)

接下来N行,第i+1行表示i号职员的快乐指数Ri。(-128<=Ri<=127)

接下来N-1行,每行输入一对整数L,K。表示K是L的直接上司。

最后一行输入0 0

输出格式:

输出最大的快乐指数。

输入输出样例

输入样例#1:

7
1
1
1
1
1
1
1
1 3
2 3
6 4
7 4
4 5
3 5
0 0
输出样例#1:

5

思路:

  拓扑排序+动规  

  具体方法就是先找到所有的入度为0的点,(最下层的点),入队.从下面往上走,遇到入度为0的入队,并且稍微加一点处理.

  首先我们要明确,每个点都有“选”,“不选”两种(来不来),

  然后假设v表示当前到了v点,u是他的上司,dp[v][0/1]表示当前点选或者不选时的快乐最大值

  那么从当前点到他的上司时,他的上司如果选:dp[u][1]+=dp[v][0];当前点不能选上,如果他的上司不选 dp[u][0]=max(dp[v][0],dp[v][1]);他可以选也可以不选,在两种情况中取大.

  那我们就可以在拓扑排序时把这些完成就行了.

坑点:

  疑似是没有坑点的.反正我没被坑到hahaha

代码:

#include <iostream>
#include <cstdio>
#include <queue>
#include <cmath> using namespace std; const int M = ;
int n,ans;
int dp[M][];
/*
我们有两种状态:
选上或是不选,如果选上,用1来表示,里面的值就是它本身的开心值;
不选是0,dp中用0来表示
*/
struct A{
int happys;
int ru;
int dad;
}Ms[M];
queue<int>q; int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&Ms[i].happys);
int a,b;///k,l
for(int i=;i<n;i++)
{
scanf("%d%d",&a,&b);
if(a== && b==) break;
Ms[a].dad=b;
Ms[b].ru++;
}
for(int i=;i<=n;i++)
{
///初始化
dp[i][]=Ms[i].happys;
if(Ms[i].ru==) q.push(i);
}
while(!q.empty())
{
int v=q.front();
q.pop();
int u=Ms[v].dad;
if(u)
{
///不让上司来
dp[u][]+=max(dp[v][],dp[v][]);
///上司来了,这个就不能来了
dp[u][]+=dp[v][];
///他的下司已经决定了来还是不来
Ms[u].ru--;
if(Ms[u].ru==) q.push(u);///topo
}
else///没有上司
ans+=max(dp[v][],dp[v][]);///加上寻找最优答案
}
printf("%d\n",ans);
return ;
}

luogu P1352 没有上司的舞会 x的更多相关文章

  1. [luogu]P1352 没有上司的舞会[树形DP]

    本Lowbee第一次写树形DP啊,弱...一个变量写错半天没看出来...... 题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点 ...

  2. LuoGu P1352 没有上司的舞会

    题目传送门 这可能是最简单的树形Dp了吧 对于每个人,要么他来,他的下属不来 要么他不来,他的下属爱来不来 于是设计状态: f[i][0/1]表示以i为根的子树中最大能达到的快乐值(i这个人选或者不选 ...

  3. 洛谷 p1352 没有上司的舞会 题解

    P1352 没有上司的舞会 题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员 ...

  4. 洛谷P1352 没有上司的舞会——树形DP

    第一次自己写树形DP的题,发个博客纪念`- 题目来源:P1352 没有上司的舞会 题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结 ...

  5. P1352 没有上司的舞会——树形DP入门

    P1352 没有上司的舞会 题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员 ...

  6. 洛谷P1352 没有上司的舞会 [2017年5月计划 清北学堂51精英班Day3]

    P1352 没有上司的舞会 题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子 结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职 ...

  7. 【Luogu】P1352没有上司的舞会(树形DP)

    题目链接 设f[i][0]表示第i个人不去舞会时子树的最大欢乐度,f[i][1]表示第i个人去舞会时子树的最大欢乐度. 则有状态转移方程:f[i][0]+=∑max(f[to][0],f[to][1] ...

  8. P1352 没有上司的舞会&&树形DP入门

    https://www.luogu.com.cn/problem/P1352 题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的 ...

  9. 洛谷——P1352 没有上司的舞会

    https://www.luogu.org/problem/show?pid=1352#sub 题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树, ...

随机推荐

  1. spring boot-16.使用redis做缓存

    spring boot 自动配置了多种 缓存管理器,按照下面的顺序查找,如果容器中有相应的组件,则使用相应的缓存管理器. Generic JCache (JSR-107) EhCache 2.x Ha ...

  2. ubuntu 设置sudo 免密码

    一. 修改sudoers的权限 二. 修改sudoers 文件 <1>. 在文件最后一行添加yourusername ALL=(ALL) NOPASSWD : ALL 三. 修改回sudo ...

  3. Linux 查看系统相关信息(系统发型版本及内核版本等)

    以下为 Linux 以下信息查看命令,记录以备用 # uname -a # 查看内核/操作系统/CPU信息 # /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # ...

  4. OpenCV处理文件、视频和摄像头

    图像的本质(图像可以用数组来表示) import numpy as np import cv2 img = np.zeros((3, 3), dtype=np.uint8) print(img, im ...

  5. 092、部署Graylog日志系统(2019-05-16 周四)

    参考https://www.cnblogs.com/CloudMan6/p/7808708.html   Graylog 是与 ELK 可以相提并论的一款几种式日志管理方案,支持数据收集.检索.可视化 ...

  6. js 类型转变

    在绝大部分情况下,操作符和函数可以自动将一个值转换成正确的数据类型.这被称为"类型转变(type conversion)". 举个例子,alert 自动转变任何类型的参数为字符串类 ...

  7. 响应式前端框架Bootstrap系列(11)分页

    分页功能已经封装成一个独立的js文件,也是用bs完成的,名称为bootstrap-paginator.js. 使用前先导入文件 : <script src="../libs/boots ...

  8. python接口自动化 - Requests-3 高级用法

    高级用法 本篇文档涵盖了 Requests 的一些高级特性. 会话对象 会话对象让你能够跨请求保持某些参数.它也会在同一个 Session 实例发出的所有请求之间保持 cookie, 期间使用 url ...

  9. C++循环单链表删除连续相邻重复值

    比如:1(头)->2->2->3->3->1->1(头) 去除以后的结果是1->2->3,注意头尾的1也要去掉一个. #include "st ...

  10. lnmp 中的laravel出现白屏的处理办法

    find / |grep fastcgi_params 其实是找fastcgi_params这个文件编辑 如果在知道目录的情况下也可以直接 vi /usr/local/nginx/conf/fastc ...