题目描述

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

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

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

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

输入输出格式

输入格式:

输入文件的第一行包含两个用空格隔开的整数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,有线电视网就亏本了,而只让③④两个用户看比赛就不亏本了。

非常好的一道树形dp

用了分组背包的思想dp[i][j]表示   i结点连接 j 个终端所能获取的最大利益

背包的总容量相当于该点为根节点的子树中所有的用户数量(dp[i][j]的 j 不可能超过它连接的所有用户数)。然后,把该节点的每个儿子看成一组,每组中的元素为选一个,选两个...选n个用户。

分组dp的伪代码:   (就是把01背包反过来  这样就保证每组物品只取一个!)

#include<bits/stdc++.h>
using namespace std;
//input by bxd
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define repp(i,a,b) for(int i=(a);i>=(b);--i)
#define RI(n) scanf("%d",&(n))
#define RII(n,m) scanf("%d%d",&n,&m)
#define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define RS(s) scanf("%s",s);
#define ll long long
#define pb push_back
#define REP(i,N)  for(int i=0;i<(N);i++)
#define CLR(A,v)  memset(A,v,sizeof A)
//
#define inf 0x3f3f3f3f
#define lson l,m,pos<<1
#define rson m+1,r,pos<<1|1
const int N=3000+5;
int pos,head[2*N];
struct Edge
{int to,nex,v;
}edge[N*2];
void add(int a,int b,int c)
{edge[++pos].nex=head[a];head[a]=pos;edge[pos].to=b;edge[pos].v=c;
}
int node[N];
int dp[N][N];
int m,n;int dfs(int u,int fa)
{if(u>n-m){dp[u][1]=node[u];return 1;}int sum=0;for(int i=head[u];i;i=edge[i].nex){int v=edge[i].to;if(v==fa)continue;int t=dfs(v,u);sum+=t;repp(j,sum,1)rep(k,1,t)if(j>=k)dp[u][j]=max(dp[u][j],dp[u][j-k]+dp[v][k]-edge[i].v);}return sum;
}
int main()
{RII(n,m);rep(i,1,n-m){int q;RI(q);while(q--){int a,b;RII(a,b);add(i,a,b);}}rep(i,n-m+1,n)RI(node[i]);CLR(dp,-0x3f);rep(i,1,n)dp[i][0]=0;dfs(1,0);repp(i,m,1){if(dp[1][i]>=0){cout<<i;break;}}
}

View Code

转载于:https://www.cnblogs.com/bxd123/p/10848580.html

P1273 有线电视网 树形dp相关推荐

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

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

  2. 洛谷 P1273 有线电视网

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

  3. 洛谷P1273 有线电视网

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

  4. luogu P1273 有线电视网

    原题链接:https://www.luogu.org/problem/show?pid=1273 题外话:luogu的试炼场,棋盘制作与地精部落两道省选题就不说了,其他的三道题也都这么难,这道题对于树 ...

  5. P1273 有线电视网

    题面:https://www.luogu.org/problem/P1273 本题是树上背包裸题.Code: #include<iostream> #include<cstdio&g ...

  6. gfoj树形dp 有线电视网

    题目:http://www.gdfzoj.com/oj/contest/271/problems/4 有点小长~ 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这 ...

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

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

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

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

  9. 动态规划 —— 树形 DP

    [概述] 树形动态规划是在树的数据结构上的动态规划,在各个阶段呈现树状关系的时候可以采用树形 DP,其基本思想是由子节点的信息推出父节点的信息. 树形 DP 中,是通过以下 4 点树的特点来进行建图的 ...

最新文章

  1. chorme插件 ,在浏览器上模拟手机,pad 查看网页|前端技术开发必备插件
  2. mediasoup-client 和 libmediasoupclient 指南
  3. jQuery中的事件冒泡、事件捕获和事件追加引发的问题
  4. 关于协方差矩阵需要注意的一个事项
  5. Feign从配置文件中读取url
  6. pdf.js插件使用记录,在线打开pdf
  7. 用ASP.NET 2.0设计网络在线投票系统
  8. cookie session token 之间的区别
  9. oracle em界面监控出来的奇怪图像_监控工程常见的5大难题,项目中都会遇到
  10. angular学习的一些Mark
  11. SPFA+Dinic HDOJ 3416 Marriage Match IV
  12. 2021牛客寒假算法基础集训营1,签到题ABFIJ
  13. dispatcherServlet流程图
  14. 动态的顺序表(C语言实现)
  15. 所谓的日常 #10 - 勤王室馬騰舉義 報父仇曹操興師
  16. 算法入门—《啊哈算法》读书总结
  17. stm32F103+EncEthernet+ENC28J60驱动+ping
  18. 【Wi-Fi】IEEE 802.11 Standards 之 802.11a/b/g/n/ac/ax初探
  19. AVCaptureDevice中通过调用VideoZoomFactor方法调整焦距实现拉近拉远镜头进行拍照录制视频(动画缩放画面,不闪屏)
  20. SIM卡无法识别经验案例

热门文章

  1. smarty模板基础2 缓存文件
  2. chrome调试技巧
  3. JS对象 字符串分割 split() 方法将字符串分割为字符串数组,并返回此数组。 语法: stringObject.split(separator,limit)...
  4. 安卓启动相关以及架构设计相关
  5. SL项目创建失败_提示安装SDK
  6. Linux---文件、软链接于硬链接文件
  7. 办公室同事全是女性是一种什么体验?
  8. 吃核桃仁有什么好处?
  9. 小财靠勤,中财靠德,大财靠命,现在多少钱才是小财?
  10. 25岁做什么,可在5年后受益匪浅?