题目描述

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

从转播站到转播站以及从转播站到所有用户终端的信号传输费用都是已知的,一场转播的总费用等于传输信号的费用总和。

现在每个用户都准备了一笔费用想观看这场精彩的足球比赛,有线电视网有权决定给哪些用户提供信号而不给哪些用户提供信号。

写一个程序找出一个方案使得有线电视网在不亏本的情况下使观看转播的用户尽可能多。

输入输出格式

输入格式:
输入文件的第一行包含两个用空格隔开的整数N和M,其中2≤N≤3000,1≤M≤N-1,N为整个有线电视网的结点总数,M为用户终端的数量。

第一个转播站即树的根结点编号为1,其他的转播站编号为2到N-M,用户终端编号为N-M+1到N。

接下来的N-M行每行表示—个转播站的数据,第i+1行表示第i个转播站的数据,其格式如下:

K A1 C1 A2 C2 … Ak Ck

K表示该转播站下接K个结点(转播站或用户),每个结点对应一对整数A与C,A表示结点编号,C表示从当前转播站传输信号到结点A的费用。最后一行依次表示所有用户为观看比赛而准备支付的钱数。

输出格式:
输出文件仅一行,包含一个整数,表示上述问题所要求的最大用户数。

输入输出样例

输入样例#1:
5 3
2 2 2 5 3
2 3 2 4 3
3 4 2
输出样例#1:
2
说明

样例解释

如图所示,共有五个结点。结点①为根结点,即现场直播站,②为一个中转站,③④⑤为用户端,共M个,编号从N-M+1到N,他们为观看比赛分别准备的钱数为3、4、2,从结点①可以传送信号到结点②,费用为2,也可以传送信号到结点⑤,费用为3(第二行数据所示),从结点②可以传输信号到结点③,费用为2。也可传输信号到结点④,费用为3(第三行数据所示),如果要让所有用户(③④⑤)都能看上比赛,则信号传输的总费用为:

2+3+2+3=10,大于用户愿意支付的总费用3+4+2=9,有线电视网就亏本了,而只让③④两个用户看比赛就不亏本了。


树形背包
f[u][i]表示在以u为根的子树中取i个子节点.
重点是理解好f[u][i]的维护过程.

#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxN = 3000;
int n, m;
int head[maxN + 1];
int _size;
struct edge
{int v, w, next;
}G[maxN - 1];
void addEdge(int u, int v, int w)
{G[_size].v = v;G[_size].w = w;G[_size].next = head[u];head[u] = _size ++;
}
int val[maxN + 1];
int size[maxN + 1];
void DFS(int u)
{if(u > n - m){size[u] = 1;return;}size[u] = 0;for(int i = head[u]; i != - 1; i = G[i].next)DFS(G[i].v), size[u] += size[G[i].v];
}
long long f[maxN + 1][maxN + 1];
void DP(int u)
{f[u][0] = 0;if(u > n - m){f[u][1] = val[u];return;}for(int i = head[u]; i != - 1; i = G[i].next){int v = G[i].v;DP(v);for(int j = size[u]; j; j --)   //避免后效性 for(int k = 1; k <= min(size[v], j); k ++) f[u][j] = max((long long)f[u][j], f[u][j - k] + f[v][k] - (long long)G[i].w);//这一坨要重点理解 }
}
int main()
{ios::sync_with_stdio(false);cin >> n >> m;memset(head, - 1, sizeof(head));_size = 0;for(int i = 1; i <= n - m; i ++){int k;cin >> k;for(int j = 0; j < k; j ++){int v, w;cin >> v >> w;addEdge(i, v, w);}}for(int i = n - m + 1; i <= n; i ++)cin >> val[i];memset(f, - 127, sizeof(f));DFS(1);DP(1);for(int i = size[1]; i >= 0; i --)if(f[1][i] >= 0){cout << i;return 0;}
}

洛谷1273有线电视网相关推荐

  1. 洛谷-1273 有线电视网

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

  2. 洛谷P1273 有线电视网 题解

    洛谷P1273 有线电视网 题解 题目链接:P1273 有线电视网 题意: 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为 ...

  3. [洛谷原创]有线电视网

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

  4. 洛谷 P1273 有线电视网

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

  5. 洛谷P1273 有线电视网

    题目链接 题意概述:一颗以1为根节点的树,树上路径权值为负,叶子节点权值为正,定义权值和为根结点到叶子结点上的路径边权+叶子点权,在权值和为非负数的情况下最多到达多少叶子节点. 拿到题目第一眼莫名觉得 ...

  6. 【洛谷 1273】有线电视网

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

  7. 洛谷 深基 第4部分 基础数学与数论(19-21课)

    洛谷 深基 第4部分 基础数学与数论  第19章 位运算与进制转换 P1143 进制转换 https://www.luogu.com.cn/problem/P1143 洛谷P1143 进制转换的Pyt ...

  8. 洛谷 P1273 【有线电视网】

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

  9. 有线电视网(洛谷-P1273)

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

最新文章

  1. python线程暂停_关于多线程:如何使“停止”按钮终止已经在Tkinter中运行的“开始”功能(Python)...
  2. 马云:我不懂技术但欣赏技术 达摩院必须超越微软 - 20171011
  3. php清空html_php怎么清除html代码
  4. 【剑指offer】_19 滑动窗口中的最大值
  5. antimalware service executable占用内存过高_SQLServer占用服务器内存过高,更改这个设置就能降低内存使用率
  6. 软考网络工程师学习笔记3-广域通信网
  7. Hadoop入门基础教程 Hadoop之完全分布式环境搭建
  8. Java Web实训项目:西蒙购物网(上)
  9. 小白怎么学习云计算?2020云计算学习大纲
  10. 海康 安全码 修改密码_「海康威视客户服务」“通道被锁定”“网络不可达”“未认证的设备”……NVR4.0 Lite通道专题来袭!...
  11. 应用未安装!安装包似乎已经损坏
  12. linux怎么查看hwaddr_怎么查询linux centos mac地址
  13. 题解 - [POI2008]KUP-Plot purchase
  14. 基于SpringBoot的网上电影票购买系统设计与实现
  15. 蓝桥杯陶陶摘苹果C语言,Java实现 蓝桥杯VIP 算法提高 陶陶摘苹果2
  16. [记录]手机数据恢复
  17. 可以完美在 wps中使用zotero的方法
  18. 记录一次糟心的appium启动篇
  19. 计算机硬件的最低配置,Windows7系统的最低硬件配置要求是什么
  20. 一篇生物学博士的自白,写的很不错,博士生的真实写照

热门文章

  1. 1. JDBC详解~
  2. beaglebone black(AM3358)使用SD卡启动系统
  3. 如何用话费账户来做手机支付
  4. 计算机指令的基本概念
  5. idea单步调试快速跳过后面的断点-Mute Breakpoints
  6. springMVC的常用注解有哪些?
  7. RemoteApp 实现分析
  8. 一位MM对于男人的精彩评论
  9. 行业分析| 为什么在线自习室这么受年轻人的追捧?
  10. 使用node服务器简单启动本地项目