/*
想了半天没想出状态 自己还是太弱了 QAQ
题目问的是最多供给多少户 一般想法是把这个值定义为状态量
没想出来QAQ....看了看题解的状态 很机智....
f[i][j]表示i的子树 选了j个叶子的最大收益
这样 不亏本就是收益>=0
转移的话 先搜一下这个子树有几个叶子 然后枚举儿子
枚举当前儿子分几个叶子 这里的枚举顺序有套路
从大到小枚举i分几个 从小到大枚举j分几个
这样可以避免 重复选择
注意初始化
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 3010
using namespace std;
int n,m,p,head[maxn],num,f[maxn][maxn],ans,c[maxn];
struct node{
int v,t,pre;
}e[maxn];
void Add(int from,int to,int dis){
num++;e[num].v=to;
e[num].t=dis;
e[num].pre=head[from];
head[from]=num;
}
int Dfs(int u)
{
if(u>p){
f[u][]=c[u];
return ;
}
int s=;
for(int i=head[u];i;i=e[i].pre){
int v=e[i].v;
int x=Dfs(v);s+=x;
for(int j=s;j>=;j--)
for(int k=;k<=x;k++)
f[u][j]=max(f[u][j],f[u][j-k]+f[v][k]-e[i].t);
}
return s;
}
int main()
{
scanf("%d%d",&n,&m);p=n-m;
for(int i=;i<=p;i++){
int x,y,z;
scanf("%d",&x);
for(int j=;j<=x;j++){
scanf("%d%d",&y,&z);
Add(i,y,z);
}
}
for(int i=p+;i<=n;i++)
scanf("%d",&c[i]);
memset(f,-/,sizeof(f));
for(int i=;i<=n;i++)
f[i][]=;
Dfs();
for(int i=;i<=m;i++)
if(f[][i]>=)ans=max(ans,i);
printf("%d\n",ans);
return ;
}

洛谷 P1273 有线电视网(dp)的更多相关文章

  1. 洛谷 P1273 有线电视网

    2016-05-31 13:25:45 题目链接: 洛谷 P1273 有线电视网 题目大意: 在一棵给定的带权树上取尽量多的叶子节点,使得sigma(val[选择的叶子节点])-sigma(cost[ ...

  2. 洛谷 P1273 有线电视网(树形背包)

    洛谷 P1273 有线电视网(树形背包) 干透一道题 题面:洛谷 P1273 本质就是个背包.这道题dp有点奇怪,最终答案并不是dp值,而是最后遍历寻找那个合法且最优的\(i\)作为答案.dp值存的是 ...

  3. 洛谷P1273 有线电视网 (树上分组背包)

    洛谷P1273 有线电视网 题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树的内部节 ...

  4. 洛谷P1273 有线电视网 树上分组背包DP

    P1273 有线电视网 )逼着自己写DP 题意:在一棵树上选出最多的叶子节点,使得叶子节点的值 减去 各个叶子节点到根节点的消耗 >= 0: 思路: 树上分组背包DP,设dp[u][k] 表示 ...

  5. 【题解】洛谷P1273 有线电视网(树上分组背包)

    次元传送门:洛谷P1273 思路 一开始想的是普通树形DP 但是好像实现不大好 观摩了一下题解 是树上分组背包 设f[i][j]为以i为根的子树中取j个客户得到的总价值 我们可以以i为根有j组 在每一 ...

  6. 洛谷——P1273 有线电视网

    P1273 有线电视网 题目大意: 题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树 ...

  7. C++ 洛谷 P1273 有线电视网 题解

     P1273 有线电视网  很明显,这是一道树形DP(图都画出来了,还不明显吗?) 未做完,持续更新中…… #include<cstdio> #include<cstring> ...

  8. 洛谷P1273 有线电视网 【树上分组背包】

    题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树的内部节点. 从转播站到转播站以及从 ...

  9. 洛谷P1273 有线电视网【树形dp】

    题目:https://www.luogu.org/problemnew/show/P1273 题意:一棵树,叶子节点是用户,每天边有一个权值表示花费,每一个用户有一个值表示他们会交的钱. 问在不亏本的 ...

随机推荐

  1. Json数据时间格式的处理

    方法: using Newtonsoft.Json; using Newtonsoft.Json.Converters;//需引入Newtonsoft.Json.dll public class Co ...

  2. lsmod

    http://blog.csdn.net/yuan892173701/article/details/8960607 抽空写下

  3. 关于Verilog 中的for语句的探讨

    在C语言中,经常用到for循环语句,但在硬件描述语言中for语句的使用较C语言等软件描述语言有较大的区别. 在Verilog中除了在Testbench(仿真测试激励)中使用for循环语句外,在Test ...

  4. (转载)50个c/c++源代码网站

    C/C++是最主要的编程语言.这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码.这份清单提供了源代码的链接以及它们的小说明.我已 尽力包括最佳的C/C++源代码的网站.这不是一个完整的 ...

  5. 如何更好辨认House of hello恶搞包的真假

    相信很多朋友都知道houseofhello恶搞包这个品牌,甚至很多朋友都买过,首先呢,她是恶搞包,算自主品牌,它无淘宝店,更没有所谓的香港实体店.因为这品牌受到广大朋友的狂热,导致无数仿品的出现,淘宝 ...

  6. [UOJ Round#4 A] [#51] 元旦三侠的游戏 【容斥 + 递推】

    题目链接:UOJ - 51 据说这题与 CF 39E 类似. 题目分析 一看题目描述,啊,博弈论,不会!等待爆零吧... 这时,XCJ神犇拯救了我,他说,这题可以直接搜啊. 注意!是用记忆化搜索,状态 ...

  7. Java中的移位操作符

    记住所有的移动位数,针对的都是补码来讲的,所以要先将十进制整数转换成补码后,然后再来进行移位操作 移位操作 还要注意类型的约束条件,例如int,移动范围是0-31位,所以看补码只能看最后五位,这才是有 ...

  8. C++中自己理解的一些细节哈

    对于大牛来说,我写的可能很低级哈,留给自己看,以后遇到的都慢慢补充哈!^^ 1.每一个类定义结束后,不要忘了在类的结束符"}"后面加上一个";"哦! 2.构造函 ...

  9. 【动态规划】HDU 5492 Find a path (2015 ACM/ICPC Asia Regional Hefei Online)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5492 题目大意: 一个N*M的矩阵,一个人从(1,1)走到(N,M),每次只能向下或向右走.求(N+ ...

  10. Shader Forge 武器流光

    使用Shader Forge 简直就是一种享受,相信会比BluePrint更好