BZOJ2306: [Ctsc2011]幸福路径
Description
有向图 G有n个顶点 1, 2, …, n,点i 的权值为 w(i)。现在有一只蚂蚁,从
给定的起点 v0出发,沿着图 G 的边爬行。开始时,它的体力为 1。每爬过一条
边,它的体力都会下降为原来的 ρ 倍,其中ρ 是一个给定的小于1的正常数。而
蚂蚁爬到某个顶点时的幸福度,是它当时的体力与该点权值的乘积。
我们把蚂蚁在爬行路径上幸福度的总和记为 H。很显然,对于不同的爬行路
径,H 的值也可能不同。小 Z 对 H 值的最大可能值很感兴趣,你能帮助他计算
吗?注意,蚂蚁爬行的路径长度可能是无穷的。
Input
每一行中两个数之间用一个空格隔开。
输入文件第一行包含两个正整数 n, m,分别表示 G 中顶点的个数和边的条
数。
第二行包含 n个非负实数,依次表示 n个顶点权值 w(1), w(2), …, w(n)。
第三行包含一个正整数 v0,表示给定的起点。
第四行包含一个实数 ρ,表示给定的小于 1的正常数。
接下来 m行,每行两个正整数 x, y,表示<x, y>是G的一条有向边。可能有
自环,但不会有重边。
Output
仅包含一个实数,即 H值的最大可能值,四舍五入到小数点后一位。
Sample Input
5 5
10.0 8.0 8.0 8.0 15.0
1
0.5
1 2
2 3
3 4
4 2
4 5
Sample Output
18.0
HINT
对于 100%的数据, n ≤ 100, m ≤ 1000, ρ ≤ 1 – 10^-6
, w(i) ≤ 100 (i = 1, 2, …, n)。
Solution
把点权换成边权,钦定每条边的边权为终点点权,那么答案就是边权最大和+起点点权。
考虑这么一个转移方程
\]
其中\(d^r[i][j]\)表示路径i->j经过r条边的最大值。
注意到p<1,所以当r足够大时,p无限趋近与0.所以随便选个大一点的r就好了...(根据题解,可选r=50)类似倍增floyd那样跑一下,然而因为r只需要取到50就够了所以直接枚举就好了不用倍增。
这题还是没自己想出来啊,这个无限趋近于0根本没想到qwq。
注意一个点就是\(d^0[x][y]=p*val\),因为已经经过一条边了。
/**************************************************************
Problem: 2306
User: henryy
Language: C++
Result: Accepted
Time:1656 ms
Memory:6204 kb
****************************************************************/
#include <bits/stdc++.h>
using namespace std;
double a[110], f[52][110][110];
int n, m, s;
int main() {
double ans = 0, p = 0;
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; ++i) scanf("%lf", &a[i]);
scanf("%d%lf", &s, &p);
memset(f, -0x3f, sizeof(f));
for(int k = 0; k <= 50; ++k) for(int i = 1; i <= n; ++i) f[k][i][i] = 0;
for(int i = 1, x, y; i <= m; ++i) scanf("%d%d", &x, &y), f[0][x][y] = p * a[y];
for(int t = 1; t <= 50; ++t, p *= p) {
for(int k = 1; k <= n; ++k) for(int i = 1; i <= n; ++i) for(int j = 1; j <= n; ++j)
f[t][i][j] = max(f[t][i][j], f[t-1][i][k] + p * f[t-1][k][j]);
}
for(int i = 1; i <= n; ++i) ans = max(ans, a[s] + f[50][s][i]);
printf("%.1lf\n", ans);
}
BZOJ2306: [Ctsc2011]幸福路径的更多相关文章
- BZOJ2306:[CTSC2011]幸福路径(倍增Floyd)
Description 有向图 G有n个顶点 1, 2, …, n,点i 的权值为 w(i).现在有一只蚂蚁,从给定的起点 v0出发,沿着图 G 的边爬行.开始时,它的体力为 1.每爬过一条边,它 ...
- BZOJ2306 [Ctsc2011]幸福路径[倍增]
这个有环的情况非常的讨厌,一开始想通过数学推等比数列的和,但是发现比较繁就不做了. 然后挖掘这题性质. 数据比较小,但是体力可以很接近1(恼怒),也就是说可能可以跳很多很多步.算了一下,大概跳了2e7 ...
- bzoj2306 [Ctsc2011]幸福路径 倍增 Floyd
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=2306 题解 倍增 Floyd. 令 \(f[i][j][k]\) 表示走了 \(2^i\) 步 ...
- 【BZOJ2306】幸福路径(动态规划,倍增)
[BZOJ2306]幸福路径(动态规划,倍增) 题面 BZOJ 题解 不要求确切的值,只需要逼近 显然可以通过移动\(\infty\)步来达到逼近的效果 考虑每次的一步怎么移动 设\(f[i][j]\ ...
- 【BZOJ 2306】 2306: [Ctsc2011]幸福路径 (倍增floyd)
2306: [Ctsc2011]幸福路径 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 912 Solved: 437 Description 有向 ...
- 【bzoj2306】[Ctsc2011]幸福路径 倍增Floyd
题目描述 一张n个点的有向图,每个点有一个权值.一开始从点$v_0$出发沿图中的边任意移动,移动到路径上的第$i$个点 输入 每一行中两个数之间用一个空格隔开. 输入文件第一行包含两个正整数 n, ...
- [CTSC2011]幸福路径
题目描述 有向图 G有n个顶点 1, 2, …, n,点i 的权值为 w(i).现在有一只蚂蚁,从 给定的起点 v0出发,沿着图 G 的边爬行.开始时,它的体力为 1.每爬过一条 边,它的体力都会下降 ...
- BZOJ 2306: [Ctsc2011]幸福路径
Description 有向图 G有n个顶点 1, 2, -, n,点i 的权值为 w(i).现在有一只蚂蚁,从 给定的起点 v0出发,沿着图 G 的边爬行.开始时,它的体力为 1.每爬过一条 边,它 ...
- 「CTSC 2011」幸福路径
[「CTSC 2011」幸福路径 蚂蚁是可以无限走下去的,但是题目对于精度是有限定的,只要满足精度就行了. \({(1-1e-6)}^{2^{25}}=2.6e-15\) 考虑使用倍增的思想. 定义\ ...
随机推荐
- sql privot 实现行转列
表结构如下: RefID HRMS Name InsuranceMoney InsuranceNamefb2bdee8-e4c9-4470-8e7f-14550d3212f7 ...
- laravel 服务容器实例——深入理解IoC模式
刚刚接触laravel,对于laravel的服务容器不是很理解.看了<Laravel框架关键技术解析>和网上的一些资料后对于服务容器有了一些自己的理解,在这里分享给大家 1.依赖 IoC模 ...
- 集合——顶层collection接口(单列集合)
顶层接口的抽象方法为共性抽取的方法,即所有子类都有都可以用; 创建集合,泛型使用字符床类型String类型, 其中,new的对象,打印对象名应该是一个存储在栈内存中的地址值:这边打印出来是空即 [ ] ...
- Linux服务器---邮件服务openwebmail配置
配置openwebmail 通过修改配置文件openwebmail.conf,实现个性化邮箱定制.用户可以自由的更改邮箱logo.域名.容量 .签名等信息. 1.重定向index,快速打开邮箱.将下面 ...
- usb通信小结
2010-07-25 16:52:00 目前了解了usb通信层面的一些基础知识如下.如果有空还要再了解hid报告描述符及协议的数据包波形. 一,USB的一些基本概念 1. 管道(Pipe) 是主机和设 ...
- Promise的简单用法
众所周知的,Javascript是一种单线程的语言,所有的代码必须按照所谓的“自上而下”的顺序来执行.本特性带来的问题就是,一些将来的.未知的操作,必须异步实现.本文将讨论一个比较常见的异步解决方案— ...
- 如何使用Linux 命令more 查看文本文件
Linux 下有很多实用工具可以让你在终端界面查看文本文件.其中一个就是 more. more 跟我之前另一篇文章里写到的工具 —— less 很相似.它们之间的主要不同点在于 more 只允许你向前 ...
- Django框架----用户认证auth模块
一.auth模块 auth模块:针对auth_user表 创建超级管理用户命令: Python manage.py createsuperuser添加用户名添加密码(至少8位)确认密码添加邮箱(可为空 ...
- 建议使用nginx配合uwsgi,
试试gunicorn+supervisor+nginx. gunicorn是Python实现的的Web server,配置也比较简单. supervisor也是Python实现的,它用于进程管理. 这 ...
- HTML5<input>标签
在表单中最为核心的就是<input>标签,使用<input>标签可以在表单中定义文本输入框.单选按钮.复选框.重置按钮等,其基本语法格式如下: <input type=& ...