Time Limit: 1 second

Memory Limit: 128 MB

【问题描述】

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

【输入格式】

第一行一个整数N。(1<=N<=6000) 接下来N行,第i+1行表示i号职员的快乐指数Ri。(-128<=Ri<=127) 接下来N-1行,每行输入一对整数L,K。表示K是L的直接上司。 最后一行输入0 0

【输出格式】

输出最大的快乐指数。

【数据规模】

Sample Input1

7
1
1
1
1
1
1
1
1 3
2 3
6 4
7 4
4 5
3 5
0 0

Sample Output1

5
【题解】
题目的意思是说某个节点如果它的"直接"上司来了,它就不能来。
设一个数组f[i]表示i这个节点所在的人是否参加舞会所能达到的最大快乐度。其中f[i]数组有两维,f[i].fang表示i这个节点的人参加舞会,f[i].bufang表示i这个节点的人不参加舞会。
如果i这个节点的人参加舞会。即f[i].fang,则对于i节点来说。它的儿子节点们就只能不放(不参加)。
然后对于f[i].bufang表示i这个人不参加舞会所能达到的最大快乐度。然后对于其儿子节点们,对应的状态就可以是参加或不参加都行。
这样进行递归。
void dfs (int now)
{

for (now的所有儿子节点son)
{
f[son].fang = r[son];
dfs(son);
f[now].fang = max{f[now].fang,f[now].fang+f[son].bufang};
f[now].bufang = max{f[now].bufang,f[now].bufang+max{f[son].bufang,f[son].fang}};
}

}
从0号节点(不存在)开始。
然后如果某个节点它没有父亲(根节点),那么默认就是0啦。
即可以方便找到根节点,不用特判。
最后输出f[0].bufang.(肯定不放是最优的。如果放了的话根节点咋办????)
【代码】
#include <cstdio>

struct data2 //存放的状态
{
int fang, bufang;
}; int n, r[6001], fa[6001] = { 0 };
data2 f[6001] = { 0 }; int max(int a, int b)//返回a和b中的较大值。
{
return a>b ? a : b;
} void dfs(int now)//当前到了now这个节点。接下来要寻找到它的儿子们。
{
for (int son = 1; son <= n; son++)
if (fa[son] == now)//如果它的爸爸是now。
{
f[son].fang = r[son];//表示其先等于快乐值(放)
//你完全可以再写上一句f[son].bufang= 0
dfs(son);//递归儿子
f[now].bufang = max(f[now].bufang, max(f[now].bufang + f[son].fang, f[now].bufang + f[son].bufang));//如果不放,
//则儿子有什么状态都能递增上去,取最优值即可
f[now].fang = max(f[now].fang, f[now].fang + f[son].bufang);
//如果放了的话,儿子当中就只能取不放的状态了。同样取最优值。
}
} int main()
{
// freopen("E:\\rush.txt","r",stdin);
scanf("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%d", &r[i]);
int x0, y0;
scanf("%d%d", &x0, &y0);//输入数据
while (x0 != 0)
{
fa[x0] = y0;//记录谁的爸爸是谁。。。
scanf("%d%d", &x0, &y0);
}
dfs(0);//从0开始递归
printf("%d\n", f[0].bufang);//最后输出0不放的结果.(最优值)
return 0;
}


【u024】没有上司的舞会的更多相关文章

  1. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  2. [codevs1380]没有上司的舞会([BZOJ2060][Usaco2010 Nov]Visiting Cows 拜访奶牛)

    [codevs1380]没有上司的舞会 试题描述 Ural大学有N个职员,编号为1~N.他们有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.每个职员有一个快乐指数.现 ...

  3. 【洛谷P1352】没有上司的舞会

    [洛谷P1352]没有上司的舞会 x舷售 锚」翅θ 但是 拙臃 蓄ⅶ榔 暄条熨卫 翘ヴ馇 表现无愧于雪月工作室的核心管理 爸惚扎掬 颇瓶 芟缆肝 貌痉了 洵┭笫装 嗝◇裴腋 褓劂埭 ...

  4. Codevs1380没有上司的舞会_KEY

    没有上司的舞会 1380 没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description Ural大学有N个职员,编号为1~N.他们有从属关系,也就是说他们的关系 ...

  5. 『没有上司的舞会 树形DP』

    树形DP入门 有些时候,我们需要在树形结构上进行动态规划来求解最优解. 例如,给定一颗\(N\)个节点的树(通常是无根树,即有\(N-1\)条无向边),我们可以选择任意节点作为根节点从而定义出每一颗子 ...

  6. 没有上司的舞会|codevs1380|luoguP1352|树形DP|Elena

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description Ural大学有N个职员,编号为1~N.他们有从属关系 ...

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

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

  8. wikioi 1380 没有上司的舞会 树形dp

    1380 没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他 ...

  9. [LuoguP1352][FJSC]没有上司的舞会

    [LuoguP1352][FJSC]没有上司的舞会(Link) 现在你有一棵树,每一个点有一个点权\(R[i]\),如果选择了\(i\)点,那么\(i\)子树上的所有的点都不能选,现在要求选择若干个点 ...

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

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

随机推荐

  1. Maven搭建hadoop环境报Missing artifact jdk.tools:jdk.tools:jar:1.7

    今天,更新了工程,报错了. 项目中用了HBase,也有Hadoop相关的jar配置. pom文件, Missing artifact jdk.tools:jdk.tools:jar:1.7 Maven ...

  2. MFC窗口显隐

    使用SetLayeredWindowAttributes可以方便的制作透明窗体,此函数在w2k以上才支持,而且如果希望直接使用的话,可能需要下载最新的SDK.不过此函数在w2k的user32.dll里 ...

  3. RFID的基本组织构成

    RFID技术由3大组件构成, 包括: 阅读器.天线.标签三大组件. 阅读器 为RFID系统最重要也是最复杂的一个组件.因其工作模式一般是主动向标签询问标识信息, 所以有时又被称为询问器(Interro ...

  4. 《开源公开课分享》:Java开源框架案例分享

        缺乏高端技术人才?缺乏开发标准?    代码复用性低?技术风险难于把控?     招聘成本高?培训成本高?    假设想法不够雄伟,那么就会局限于细节:假设一開始就铺很大的摊子,将会失去控制: ...

  5. python基础--数值类型和序列类型

    Python中数值类型:int(整数),float(浮点数),True/False(布尔值,首字母必须大写) int:1    #任意整数 float:2.3   #小数 python赋值: a = ...

  6. 黑马day01 xml 的解析方式

    XML编程:利用java程序去增删改查(CRUD)xml中的数据 解析思想: dom解析 sax解析 基于这两种解析思想市面上就有了非常多的解析api sun jaxp既有dom方式也有sax方式,而 ...

  7. SQL Server2008 Hierarchyid数据类型

    以往我们在关系数据库中建立树状结构的时候,通常使用ID+ParentID来实现两条 纪录间的父子关系.但这种方式只能标示其相对位置.解决这类问题在SqlServer2005出现之前通常是采用游标来操作 ...

  8. 使用stringstream进行类型转换与字符串分割

    C++标准库中的<sstream>提供了比ANSI C的<stdio.h>更高级的一些功能,即单纯性.类型安全和可扩展性. 如果你已习惯了<stdio.h>风格的转 ...

  9. [D3] Better Code Organization with selection.call() with D3 v4

    Most of D3’s native selection APIs also return the selection (or a new selection), to enable multipl ...

  10. JAVA初始开发环境搭建

    上午想在一台新电脑上搭建java开发环境,在没有之前备份的情况下,单靠网络还真有点麻烦.最主要的原因是貌似在我当前的网络环境下jdk无法下载,官网这个链接半天打不开,http://www.oracle ...