有线电视网 无效状态的处理
题目描述
某收费有线电视网计划转播一场重要的足球比赛。他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树的内部节点。
从转播站到转播站以及从转播站到所有用户终端的信号传输费用都是已知的,一场转播的总费用等于传输信号的费用总和。
现在每个用户都准备了一笔费用想观看这场精彩的足球比赛,有线电视网有权决定给哪些用户提供信号而不给哪些用户提供信号。
写一个程序找出一个方案使得有线电视网在不亏本的情况下使观看转播的用户尽可能多。
输入输出格式
输入格式:
输入文件的第一行包含两个用空格隔开的整数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的费用。最后一行依次表示所有用户为观看比赛而准备支付的钱数。
输出格式:
输出文件仅一行,包含一个整数,表示上述问题所要求的最大用户数。
输入输出样例
5 3 2 2 2 5 3 2 3 2 4 3 3 4 2
2
说明
样例解释
如图所示,共有五个结点。结点①为根结点,即现场直播站,②为一个中转站,③④⑤为用户端,共M个,编号从N-M+1到N,他们为观看比赛分别准备的钱数为3、4、2,从结点①可以传送信号到结点②,费用为2,也可以传送信号到结点⑤,费用为3(第二行数据所示),从结点②可以传输信号到结点③,费用为2。也可传输信号到结点④,费用为3(第三行数据所示),如果要让所有用户(③④⑤)都能看上比赛,则信号传输的总费用为:
2+3+2+3=10,大于用户愿意支付的总费用3+4+2=9,有线电视网就亏本了,而只让③④两个用户看比赛就不亏本了。
【题解】注意无效状态的处理,就是要从sum[x]开始
#include<cstdio> #include<cstring> const int N=4000; int ver[N],w[N],nxt[N],head[N],en,cost[N],f[N][N],m,n; int sum[N]; inline void AddEdge(int from,int to,int dist) {ver[++en]=to,cost[en]=dist,nxt[en]=head[from],head[from]=en; } inline int max(int a,int b) {return a>b?a:b; } void dp(int x) {f[x][0]=0;for(int i=head[x]; i; i=nxt[i]) {int y=ver[i];dp(y);sum[x]+=sum[y];for(int t=sum[x]; t>=0; t--)for(int j=t; j>=0; j--)f[x][t]=max(f[x][t],f[x][t-j]+f[y][j]-cost[i]);}if(head[x]==0){f[x][1]=w[x];sum[x]=1;}} int main() {en=0;memset(head,0,sizeof(head));scanf("%d%d",&n,&m);for(int i=1; i<=n-m; i++) {int k,to,dist;scanf("%d",&k);for(int j=1; j<=k; j++) {scanf("%d%d",&to,&dist);AddEdge(i,to,dist);}}for(int i=n-m+1; i<=n; i++)scanf("%d",&w[i]);memset(f,-0x3f,sizeof f);memset(sum,0,sizeof(sum));dp(1);for(int i=m; i>=0; i--)if(f[1][i]>=0) {printf("%d\n",i);break;}return 0; }
转载于:https://www.cnblogs.com/kcfzyhq/p/8569989.html
有线电视网 无效状态的处理相关推荐
- 有线电视网(洛谷-P1273)
题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树的内部节点. 从转播站到转播站以及从 ...
- 洛谷 P1273 【有线电视网】
题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树的内部节点. 从转播站到转播站以及从 ...
- VT-x/AMD-V 硬件加速器已被启动,但当前处于无效状态
今天在virtualboxvbox中安装64位centos6.5时出现以下错误: VT-x/AMD-V硬件加速器已被启动,但当前处于无效状态.您虚拟电脑内的操作系统将无法检测到64位的CPU,因此也将 ...
- P1273 有线电视网 树形dp
题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树的内部节点. 从转播站到转播站以及从 ...
- ORA-06575: 程序包或函数 NO_VM_DROP_PROC 处于无效状态
SQL> drop user aaa ; drop user aaa ORA-00604: 递归 SQL 级别 1 出现错误 ORA-06575: 程序包或函数 NO_VM_DROP_P ...
- 洛谷P1273 有线电视网 题解
洛谷P1273 有线电视网 题解 题目链接:P1273 有线电视网 题意: 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为 ...
- 【计算机网络技术】三网是指电信网络、有线电视网和计算机网络。
1.三网是指电信网络.有线电视网和计算机网络. 2.1969年美国国防部创建了第一个真正意义上的网络:阿帕网(ARPA) 阿帕网把网络划分为通信子网(物理层,数据链路层,网络层)和资源子网(运输层,会 ...
- 程序包或函数 WM_CONCAT 处于无效状态
今天运行了很久的项目,点了一下查询突然发现出现了一个 程序包或函数 WM_CONCAT 处于无效状态的问题报错,妈耶,因为啥啊,咋地了,跑了这么就怎么就瘫痪了 废话不多说,找到报错的sql 然后勒,当 ...
- 【计算机网络】第二部分 物理层和介质(9) 使用电话网络和有线电视网进行数据传输
文章目录 9.1 电话网络 9.1.1 主要组件 9.1.2 LATA 1. LATA内部服务 2. LATA间的服务 3. 服务接入点 9.1.3 信令 1. 数据传输网络 2. 信令网络 3. 7 ...
最新文章
- 成为顶级CIO ,应该怎么做?
- 关于一个js传值的错误
- lzg_ad:XPE操作系统镜像尺寸优化
- anguarjs 上传图片预览_JS控制上传图片个数,预览上传图片
- 设计模式学习---(1)简介
- 后端开发工具:反编译工具、VS插件、.NET Framework源码地址
- 相机模型与标定(二)--相机模型
- ThreadStatic特性简介
- java数据区_Java运行时数据区域介绍
- Python学习之路 第3次笔记!
- Shiro Subject详解
- 携程酒店自动化360度质量保障体系
- android mapabc 地图 无法 拖动、缩放问题
- B站学习法之深度学习笔记一
- debian中双网卡上内外网的设置方法
- python爬取京东商品评价信息
- getAttribute(),setAttribute()的方法使用以及区别。
- 最简单的python使用ddddocr模块在线识别验证码后登录
- 压缩包密码忘记了打不开?教你用pyhton轻松解决,附视频讲解
- 一个意外错误使你无法删除该文件夹。【错误0x80070091:目录不是空的】Bandizip压缩软件解决方法
热门文章
- New interpretable deep learning model to monitor real-time PM2.5 concentrations from satellite data
- python 多线程爬取 百思不得姐段子
- lunux 下所有浏览器都提示d代理服务器拒绝连接
- python中open与with open的区别
- 局域网中PC访问VMware虚拟机中的Ubuntu
- 2022跨境出海:中东地区网红营销现状及特点
- mysql 查询主键
- python反射:hasattr()用法,致踩过的坑
- 微信小程序——数据传递(子传父)
- excel表导入navicat数据库