题目名称 | 1189. 有线电视网 |
---|---|
输入输出 | televi.in/out |
难度等级 | ★★ |
时间限制 | 1000 ms (1 s) |
内存限制 | 128 MiB |
测试数据 | 10 |
题目来源 | 王者自由 于2012-10-19加入 |
开放分组 | 全部用户 |
提交状态 | |
分类标签 | |
分享题解 |
通过:43, 提交:112, 通过率:38.39% | ||||
落尘 | 100 | 0.025 s | 0.39 MiB | C++ |
LAOS | 100 | 0.096 s | 35.85 MiB | C++ |
サイタマ | 100 | 0.101 s | 34.93 MiB | C++ |
落尘 | 100 | 0.110 s | 42.77 MiB | C++ |
葳棠殇 | 100 | 0.116 s | 31.42 MiB | C++ |
葳棠殇 | 100 | 0.116 s | 34.91 MiB | C++ |
葳棠殇 | 100 | 0.118 s | 34.91 MiB | C++ |
OIdiot | 100 | 0.127 s | 34.93 MiB | C++ |
ImwaOuKur | 100 | 0.128 s | 34.97 MiB | C++ |
啊吧啦吧啦吧 | 100 | 0.128 s | 42.77 MiB | C++ |
关于 有线电视网 的近10条评论(全部评论) | ||||
---|---|---|---|---|
| ||||
| ||||
╮(╯▽╰)╭,这题调跪了DP
| ||||
结构体的构造函数。。。坑。。。
落尘
2015-06-13 11:24
2楼
| ||||
f[i][j]表示i为根节点,有j个子节点时的最大盈利注意会取到负数!。
Profit[i]表示i节点的利润。 ChildNum[i]表示以i为根节点的叶子节点的个数。 child[i]保存i的子节点。 Dp: 枚举子节点:f[x][i]=Max(f[x][i],f[tmpNum][j]+f[x][i-j]-tmpCost); 如果x到了叶子节点:f[x][1]=Profit[x]; ChildNum[x]=1; |
某收费有线电视网计划转播一场重要的足球比赛。他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树的内部节点。
从转播站到转播站以及从转播站到所有用户终端的信号传输费用都是已知的,一场转播的总费用等于传输信号的费用总和。
现在每个用户都准备了一笔费用想观看这场精彩的足球比赛,有线电视网有权决定给哪些用户提供信号而不给哪些用户提供信号。
写一个程序找出一个方案使得有线电视网在不亏本的情况下使观看转播的用户尽可能多。
输入文件的第一行包含两个用空格隔开的整数 $n(2\leq n\leq 3000)$ 和 $m(1\leq m\leq n-1)$ ,$n$ 为整个有线电视网的结点总数,$m$ 为用户终端的数量。
第一个转播站即树的根结点编号为 $1$,其他的转播站编号为 $2\sim n - m$ ,用户终端编号为$n-m+1\sim n$。
接下来的 $n-m$ 行每行表示—个转播站的数据,第 $i+1$ 行表示第 $i$ 个转播站的数据,其格式如下:
$k$ $a_1$ $c_1$ $a_2$ $c_2$ … $a_k$ $c_k$
$k$ 表示该转播站下接 $k$ 个结点(转播站或用户),每个结点对应一对整数 $a$ 与 $c$, $a$ 表示结点编号, $c$ 表示从当前转播站传输信号到结点 $a$ 的费用。
最后一行依次表示所有用户为观看比赛而准备支付的钱数。
输出文件仅一行,包含一个整数,表示上述问题所要求的最大用户数。
5 3 2 2 2 5 3 2 3 2 4 3 3 4 2
2
如图所示,共有五个结点。结点①为根结点,即现场直播站,②为一个中转站,③④⑤为用户端,共 $3$ 个,编号从$3\sim 5$,他们为观看比赛分别准备的钱数为$3、4、2$,从结点①可以传送信号到结点②,费用为$2$,也可以传送信号到结点⑤,费用为$3$(第二行数据所示),从结点②可以传输信号到结点③,费用为$2$。也可传输信号到结点④,费用为$3$(第三行数据所示),如果要让所有用户(③④⑤)都能看上比赛,则信号传输的总费用为: $2+3+2+3=10$,大于用户愿意支付的总费用$3+4+2=9$,有线电视网就亏本了,而只让③④两个用户看比赛就不亏本了。