1065: [NOI2008] 奥运物流

Description

2008北京奥运会即将开幕,举国上下都在为这一盛事做好准备。为了高效率、成功地举办奥运会,对物流系统

进行规划是必不可少的。物流系统由若干物流基站组成,以 1 … N 进行编号。每个物流基站 i 都有且仅有一个

后继基站 Si,而可以有多个前驱基站。基站 i 中需要继续运输的物资都将被运往后继基站 Si,显然一个物流基

站的后继基站不能是其本身。编号为 1 的物流基站称为控制基站,从任何物流基站都可将物资运往控制基站。注

意控制基站也有后继基站,以便在需要时进行物资的流通。在物流系统中,高可靠性与低成本是主要设计目。对于

基站 i ,我们定义其"可靠性"R(i) 如下:设物流基站 i 有 w 个前驱基站 P1,P2, ...Pw ,即这些基站以 i

为后继基站,则基站 i 的可靠性 R(i) 满足下式:

$ R(i) = C_i + k \sum_{j=1}^w R(P_j) $

其中 Ci 和 k 都是常实数且恒为正,且有 k 小于 1 。整个系统的可靠性与控制基站的可靠性正相关,我们

的目标是通过修改物流系统,即更改某些基站的后继基站,使得控制基站的可靠性 R(1) 尽量大。但由于经费限制

,最多只能修改 m 个基站的后继基站,并且,控制基站的后继基站不可被修改。因而我们所面临的问题就是,如

何修改不超过 m 个基站的后继,使得控制基站的可靠性 R(1) 最大化。

Input

  输入第一行包含两个整数与一个实数,N,m,k。其中 N 表示基站数目,m 表示最多可修改的后继基站数目,

k 分别为可靠性定义中的常数。第二行包含 N 个整数,分别是 S1,S2...SN ,即每一个基站的后继基站编号。第三

行包含 N 个正实数,分别是 C1,C2...CN ,为可靠性定义中的常数

Output

  输出仅包含一个实数,为可得到的最大 R(1)。精确到小数点两位

Sample Input

4 1 0.5

2 3 1 3

10.0 10.0 10.0 10.0

Sample Output

30.00

HINT

  对于所有的数据,满足 m≤N≤60,Ci≤106,0.3≤k < 1,请使用双精度实数,无需考虑由此带来的误差。

题解

此题可以参照徐源盛《对一类动态规划问题的研究》

此题由于说从任何物流基站都可将物资运往控制基站,所以图为一个带有一个环的有向连通图。

设\(dp[i][j][k]\)表示第\(i\)个节点的子树中修改了\(j\)个节点且\(i\)到1的距离为\(k\)。

如若修改\(i\)节点,则\(dp[i][j][k] = max(\sum_{i=1}^w dp[son_i][j_i][2]) | (\sum_{i=1}^w j_i) = j\)

如果不修改\(i\)节点,则\(dp[i][j][k] = max(\sum_{i=1}^w dp[son_i][j_i][k+1]) | (\sum_{i=1}^w j_i) = j\)

在更新\(dp\)值时用背包优化就好了。

我在initi时初始化没更新全,WA了好几发

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 65;
const double oo = 1e22;
int Nxt[N], to[N], nxt[N], head[N], totE, n, m, Siz[N];
#define Adde(a,b) (to[totE] = b, nxt[totE] = head[a], head[a] = totE++)
double kk[N], dp[N][N][N], C[N], tmp[N][N], k, _MinT;
#define cans(a) ((_MinT = (a)) > ans ? ans = _MinT : 1) void init() {
for (int i = 0; i <= n; head[i++] = -1)
for (int j = 0; j <= n; ++j)
for (int k = 0; k <= n; ++k)
dp[i][j][k] = -oo;
totE = 0;
} void Cal(int u, int dep) {
for (int i = 0; i <= Siz[u]; ++i)
for (int j = 0; j <= m; ++j)
tmp[i][j] = -oo;
tmp[0][0] = 0.;
for (int i = head[u], s = 1; ~i; i = nxt[i], ++s) {
int v = to[i];
for (int j = 0; j <= m; ++j)
for (int k = 0; k <= j; ++k)
tmp[s][j] = max(tmp[s][j], tmp[s-1][k] + dp[v][j-k][dep]); }
} void dfs(int u) {
Siz[u] = 0;
for (int i = head[u]; ~i; i = nxt[i], ++Siz[u]) dfs(to[i]);
Cal(u, 2);
for (int i = 0; i <= n; ++i)
for (int j = 1; j <= m; ++j)
dp[u][j][i] = tmp[Siz[u]][j-1] + C[u] * k;//直接将此站接到1后面 for (int i = 0; i <= n; ++i) {
Cal(u, i + 1);
for (int j = 0; j <= m; ++j)
dp[u][j][i] = max(dp[u][j][i], tmp[Siz[u]][j] + C[u] * kk[i]);
}
} int main() {
scanf("%d%d%lf", &n, &m, &k);
for (int i = 1; i <= n; ++i) scanf("%d", Nxt + i);
for (int i = 1; i <= n; ++i) scanf("%lf", C + i);
kk[0] = 1; kk[1] = k;
double ans = -oo;
for (int i = 2; i < N; ++i) kk[i] = kk[i-1] * k;
for (int i = Nxt[1], len = 2, j; i ^ 1; i = Nxt[i], ++len) {
init();
for (j = 2; j <= n; ++j)
if (j ^ i) Adde(Nxt[j], j); else Adde(1, j);
dfs(1);
cans(dp[1][m - (Nxt[i] != 1)][0] / (1. - kk[len]));
}
printf("%.2lf\n", ans); return 0;
}

bzoj 1065: [NOI2008] 奥运物流的更多相关文章

  1. 1065: [NOI2008]奥运物流 - BZOJ

    Sample Input4 1 0.52 3 1 310.0 10.0 10.0 10.0Sample Output30.00 推荐题解:http://blog.csdn.net/whjpji/art ...

  2. 【洛谷】P4202 [NOI2008]奥运物流

    [洛谷]P4202 [NOI2008]奥运物流 感觉有点降智 首先设环长为\(len\),很容易推导出 \[ R(1) = \frac{\sum_{i = 1}^{N} C_{i} k^{dep[i] ...

  3. [NOI2008]奥运物流

    题目 洛谷 BZOJ 做法 单环有向图毒瘤题 不考虑环和改变后继:\(\sum\limits{i=1}^n C_i\cdot K^{dep(i)}\) 考虑环无穷等比求极m:\(R(1)=\sum\l ...

  4. 【BZOJ1065】【NOI2008】奥运物流(动态规划)

    [BZOJ1065][NOI2008]奥运物流(动态规划) 题面 BZOJ 洛谷 题解 先不考虑环的情况,于是变成了一棵树. 这样子我们答案的贡献是\(\sum_{i=1}^nC_i\times k^ ...

  5. 题解 Sue的小球/名次排序问题/方块消除/奥运物流

    Sue的小球 名次排序问题 方块消除 奥运物流 Sue的小球 题目大意 有 \(n\) 个小球在下落,初始位置 \((x_i,y_i)\),下落速度为 \(v_i\).你初始位置在 \(x_0\),速 ...

  6. 【BZOJ 1065】【Vijos 1826】【NOI 2008】奥运物流

    http://www.lydsy.com/JudgeOnline/problem.php?id=1065 https://vijos.org/p/1826 好难的题啊TWT ∈我这辈子也想不出来系列~ ...

  7. BZOJ 1065 奥运物流

    http://www.lydsy.com/JudgeOnline/problem.php?id=1065 思路:由于n个点,有n条边,因此由根就会引出一个环,我们枚举环的长度,在那个长度断开,我们假设 ...

  8. bzoj1065【Noi2008】奥运物流

    题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1065 给一棵基环树,每个点i的权值=ci+k*∑son[i],修改至多m个点的父亲使1号点权值 ...

  9. BZOJ 1061: [Noi2008]志愿者招募

    1061: [Noi2008]志愿者招募 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 4064  Solved: 2476[Submit][Stat ...

随机推荐

  1. Linux命令学习总结: file命令

    命令简介: 该命令用来识别文件类型,也可用来辨别一些文件的编码格式.它是通过查看文件的头部信息来获取文件类型,而不是像Windows通过扩展名来确定文件类型的. 执行权限 :All User 指令所在 ...

  2. 十几张表的join(千万级/百万级表) 7hours-->5mins

    ================START============================== 来了一个mail说是job跑得很慢,调查下原因 先来看下sql: SELECT h.order_ ...

  3. MySQL(三)

    MYSQL(三) 上一章给大家说的是数据库的视图,存储过程等等操作,这章主要讲索引,以及索引注意事项,如果想看前面的文章,url如下: MYSQL入门全套(第一部) MYSQL入门全套(第二部) 索引 ...

  4. HTTP状态管理机制之Cookie

    一.cookie 起源 cookie 最早是网景公司的雇员 Lou Montulli 在1993年3月发明,后被 W3C 采纳,目前 cookie 已经成为标准,所有的主流浏览器如 IE.Chrome ...

  5. debian/ubuntu安装桌面环境

    apt-get install xorg apt-get install gnome 然后startx ubuntu 安装Gnome桌面 1.安装全部桌面环境,其实Ubuntu系列桌面实际上有几种桌面 ...

  6. django url路径与模板中样式相对路径的问题

    static目录下有css和js及image等文件夹,里面放置网站的一些静态文件,static位于网站根目录下,django中配置静态文件这个就细说,网上都有,昨天在添加新内容时发现一个问题,我的ur ...

  7. maven核心,pom.xml详解(转)

    什么是pom?    pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件:开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的u ...

  8. 用CSS开启硬件加速来提高网站性能

    国外一篇文章,有点意思,转载过来,准备尝试下~ 中文地址:http://www.cnblogs.com/rubylouvre/p/3471490.html 原文地址:http://blog.teamt ...

  9. 【问题&解决】fonts/fontawesome-webfont.woff2 404 (Not Found)

    问题: 虽然网页正常显示和运行,但是有2个字体文件出现404错误.像笔者这种强迫症是接受不了的. 解决: 因为笔者的服务器是虚拟主机,只需要在主机控制器平台添加对应的MIME类型即可. 这样服务器就支 ...

  10. etl结合java的例子

    1.新建Java测试类,导出Jar包,放在kettle目录中的libext文件中 package test; public class Test{ public static final String ...