luogu1273 有限电视网
题目大意
有一棵有根树,每个结点有一个收益,每条边有一个花费。如果要选择一个叶子结点,则根节点到该叶子结点的路径上的所有结点都必须被选择。求当总收益大于等于总花费的情况下,最多能选择多少个叶子结点。
思路

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cassert>
using namespace std; const int MAX_NODE = 3010, MAX_EDGE = MAX_NODE, MINF = 0xcfcfcfcf;
int TotNode, TotLeaf; struct Node;
struct Edge; struct Node
{
Edge *Head;
int DP[MAX_NODE];
int Val;
int LeafCnt;
}_nodes[MAX_NODE]; struct Edge
{
Node *To;
Edge *Next;
int Cost;
}_edges[MAX_EDGE];
int _eCount; void AddEdge(Node *from, Node *to, int w)
{
Edge *e = _edges + ++_eCount;
e->To = to;
e->Cost = w;
e->Next = from->Head;
from->Head = e;
} void Dfs(Node *cur)
{
memset(cur->DP, MINF, sizeof(cur->DP));
cur->DP[0] = 0;
if (cur - _nodes > TotNode - TotLeaf)
{
assert(!cur->Head);
cur->DP[1] = cur->Val;
cur->LeafCnt = 1;
return;
}
for (Edge *e = cur->Head; e; e = e->Next)
{
Dfs(e->To);
cur->LeafCnt += e->To->LeafCnt;
}
for (Edge *e = cur->Head; e; e = e->Next)
for (int j = cur->LeafCnt; j >= 1; j--)
for (int k = 1; k <= min(j, e->To->LeafCnt); k++)
cur->DP[j] = max(cur->DP[j], cur->DP[j - k] + e->To->DP[k] - e->Cost);
} int main()
{
scanf("%d%d", &TotNode, &TotLeaf);
for (int i = 1; i <= TotNode - TotLeaf; i++)
{
int totOut, to, w;
scanf("%d", &totOut);
for (int j = 1; j <= totOut; j++)
{
scanf("%d%d", &to, &w);
AddEdge(_nodes + i, _nodes + to, w);
}
}
for (int i = TotNode - TotLeaf + 1; i <= TotNode; i++)
scanf("%d", &_nodes[i].Val);
Dfs(_nodes + 1);
for (int j = TotLeaf; j >= 0; j--)
{
if (_nodes[1].DP[j] >= 0)
{
printf("%d\n", j);
return 0;
}
}
return 0;
}
luogu1273 有限电视网的更多相关文章
- [Luogu1273] 有线电视网
[Luogu1273] 有线电视网 题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树 ...
- Luogu P1273 有限电视网【树形Dp/树形背包】
题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树的内部节点. 从转播站到转播站以及从 ...
- Netflix 是怎样的一家公司?为什么它在美国非常成功
https://www.zhihu.com/question/19552101 作者:陈达链接:https://www.zhihu.com/question/19552101/answer/11486 ...
- 【Luogu1273】有线电视网(动态规划)
[Luogu1273]有线电视网(动态规划) 题面 题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端, ...
- winform快速开发平台->让有限的资源创造无限的价值!
最近一直在维护一套自己的快速开发平台. 主要应对针对C/S架构下的项目.然而对winform这快,还真没有看到过相对好的快速开发平台, 何为快速,在博客园逛了了好久, 预览了很多通用权限管理系统. 确 ...
- FZU 2193 So Hard (有限小数转换最简分数)(想法题)
题目链接: 传送门 So Hard Time Limit: 1000MS Memory Limit: 65536K 题目描述 请将有限小数化为最简分数. 输入 一个整数n 表示需要转化的小数个 ...
- Cassandra 有限分页策略
瀑布式分页 如果你的应用只需要瀑布式的分页,那么,Cassandra可以很好的支持,不过记得要指定好排序顺序. CLUSTERING ORDER BY (add_time DESC); 常见的分页,跳 ...
- 无限的hypotheses 变成有限的dichotomies
给定任意D,它是某些H的Bad Sample(即Ein和Eout不接近)的概率为: 即H中备选函数的数量M=|H|越少,样本数据量N越大,则样本成为坏样本的概率越小.在一个可接受的概率水平上,学习算法 ...
- 洛谷 P1273 有线电视网
2016-05-31 13:25:45 题目链接: 洛谷 P1273 有线电视网 题目大意: 在一棵给定的带权树上取尽量多的叶子节点,使得sigma(val[选择的叶子节点])-sigma(cost[ ...
随机推荐
- Oracle12C用户创建、授权、登录
Oracle12C用户创建.授权.登录 1.以系统用户登录 C:\Users\LEI>sqlplus sys/dwh as sysdba; SQL*Plus: Release 12.1.0.2. ...
- Java final和static 修饰符
一.final final是不变的,最终的意思.可以用来修饰变量,方法,类. 1. 修饰变量 private final int a = 2; private final int b; // fina ...
- 客户端通过base64上传bitmap服务器
首先致谢:http://www.jb51.net/article/129743.htm 咱们不是代码的生产者,只是代码的搬运工. 场景描述:Android客户端需要上传头像等图片到服务器,经双方协商决 ...
- CSS——padding
padding是盒子内容与边框的距离. padding:10px;/*上下左右都是10px*/ padding:10px 20px;/*上下是10px 左右是20px*/ padding:10px 2 ...
- c指针之内存释放
// 1.正常使用包含指针的结构体 // 2.正常使用元素类型为指针的vector #include<string.h> #include<stdio.h> #include& ...
- 我的liunx开发环境的配置之路
相信有不少人和我一样,虽然是做纯linux开发,但并不排斥windows,并且喜欢在windows下面的使用各种好用的工具来让linux的编程工作变得更加方便.实际上每一个系统都有他的过人支持,win ...
- 【译】x86程序员手册16-5.3联合使用段与分页转换
5.3 Combining Segment and Page Translation 联合使用段与分页转换 Figure 5-12 combines Figure 5-2 and Figure 5- ...
- BZOJ 2038 2009国家集训队 小Z的袜子【模板·莫队】
[题解] 1,先说说莫队算法. 莫队算法是用来离线处理区间问题的算法.非常易于理解和使用,且运用十分广泛. 假设我们现在已知区间[L,R]的答案,如果我们能以较低的时间复杂度扩展得到区间$[L-1,R ...
- scrapy——8 scrapyd使用
scrapy——8 scrapyd使用 什么是scrapyd 怎么安装scrapyd 如何使用scrapyd--运行scrapyd 如何使用scrapyd--配置scrapy.cfg 如何使用s ...
- CodeForcesGym 100735H Words from cubes
Words from cubes Time Limit: Unknown ms Memory Limit: 65536KB This problem will be judged on CodeFor ...