2306: [Ctsc2011]幸福路径

Time Limit: 10 Sec  Memory Limit: 256 MB
Submit: 912  Solved: 437

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)。

Source

【分析】

  无限长的路,但是p不断变小,所以做到足够精度也就可以了。

  然后就是,用倍增来搞floyd。

  $F[i][j][t]$表示从i走到j走了t步的最大收益,$F[i][j][t]=max(F[i][j][t-1]+F[i][j][t-1]*{p}^{t-1});$

  这个滚动DP啦~~

  做到$2^t$超越精度就好了。

  【表示其实初始化那里有点迷人,我是看po姐的。。

 #include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define Maxn 110
#define Maxm 1100
#define LL long long
#define INF 0xfffffff
const double eps=1e-; double w[Maxn],f[Maxn][Maxn][];
double mymax(double x,double y) {return x>y?x:y;} int main()
{
int n,m,st;
double p;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%lf",&w[i]);
scanf("%d%lf",&st,&p);
memset(f,0xc2,sizeof(f));
for(int i=;i<=n;i++) f[i][i][]=;
for(int i=;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
f[x][y][]=w[y]*p;
}
int nw=;
for(double l=p;l>eps;l=l*l)
{
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
f[i][j][nw^]=-INF;
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
f[i][j][nw^]=mymax(f[i][j][nw^],f[i][k][nw]+f[k][j][nw]*l);
}
nw^=;
}
double ans=;
for(int i=;i<=n;i++) ans=mymax(ans,f[st][i][nw]);
printf("%.1lf\n",ans+w[st]);
return ;
}

2017-04-05 15:56:06

【BZOJ 2306】 2306: [Ctsc2011]幸福路径 (倍增floyd)的更多相关文章

  1. bzoj2306 [Ctsc2011]幸福路径 倍增 Floyd

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=2306 题解 倍增 Floyd. 令 \(f[i][j][k]\) 表示走了 \(2^i\) 步 ...

  2. 【bzoj2306】[Ctsc2011]幸福路径 倍增Floyd

    题目描述 一张n个点的有向图,每个点有一个权值.一开始从点$v_0$出发沿图中的边任意移动,移动到路径上的第$i$个点 输入 每一行中两个数之间用一个空格隔开. 输入文件第一行包含两个正整数 n,  ...

  3. BZOJ2306:[CTSC2011]幸福路径(倍增Floyd)

    Description 有向图 G有n个顶点 1,  2, …,  n,点i 的权值为 w(i).现在有一只蚂蚁,从给定的起点 v0出发,沿着图 G 的边爬行.开始时,它的体力为 1.每爬过一条边,它 ...

  4. BZOJ2306 [Ctsc2011]幸福路径[倍增]

    这个有环的情况非常的讨厌,一开始想通过数学推等比数列的和,但是发现比较繁就不做了. 然后挖掘这题性质. 数据比较小,但是体力可以很接近1(恼怒),也就是说可能可以跳很多很多步.算了一下,大概跳了2e7 ...

  5. BZOJ 2306: [Ctsc2011]幸福路径

    Description 有向图 G有n个顶点 1, 2, -, n,点i 的权值为 w(i).现在有一只蚂蚁,从 给定的起点 v0出发,沿着图 G 的边爬行.开始时,它的体力为 1.每爬过一条 边,它 ...

  6. BZOJ2306: [Ctsc2011]幸福路径

    Description 有向图 G有n个顶点 1, 2, -, n,点i 的权值为 w(i).现在有一只蚂蚁,从 给定的起点 v0出发,沿着图 G 的边爬行.开始时,它的体力为 1.每爬过一条 边,它 ...

  7. [CTSC2011]幸福路径

    题目描述 有向图 G有n个顶点 1, 2, …, n,点i 的权值为 w(i).现在有一只蚂蚁,从 给定的起点 v0出发,沿着图 G 的边爬行.开始时,它的体力为 1.每爬过一条 边,它的体力都会下降 ...

  8. 【BZOJ2306】幸福路径(动态规划,倍增)

    [BZOJ2306]幸福路径(动态规划,倍增) 题面 BZOJ 题解 不要求确切的值,只需要逼近 显然可以通过移动\(\infty\)步来达到逼近的效果 考虑每次的一步怎么移动 设\(f[i][j]\ ...

  9. BZOJ.4180.字符串计数(后缀自动机 二分 矩阵快速幂/倍增Floyd)

    题目链接 先考虑 假设S确定,使构造S操作次数最小的方案应是:对T建SAM,S在SAM上匹配,如果有S的转移就转移,否则操作数++,回到根节点继续匹配S.即每次操作一定是一次极大匹配. 简单证明:假设 ...

随机推荐

  1. 引用类型 ( 对象定义 )——Function 类型

    本文地址:http://www.cnblogs.com/veinyin/p/7607798.html  函数实际上是对象,也具有属性和方法,函数名实际上是指向函数对象的指针 function sum( ...

  2. iOS网络基础---iOS-Apple苹果官方文档翻译

    CHENYILONG Blog iOS网络基础---iOS-Apple苹果官方文档翻译 iOS网络基础 技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http: ...

  3. c语言学习笔记.条件编译.#if,#ifdef,if的区别

    最近遇到了,以此做个记录. 条件编译 是C预处理部分的内容. 其判断语句包括 #if  #else if  #else 以及 #ifdef 和 #endif. 使用 #if (表达式) codes1. ...

  4. docker 加速

    Docker配置阿里云加速地址 打开阿里云网站https://cr.console.aliyun.com,登陆自己的阿里云账号. 然后只需要在服务器配置docker配置文件,只需要修改"Ex ...

  5. PHP提取url

    <?php $str = parse_url('http://localhost/?id=2&cd=2', PHP_URL_QUERY); ECHO $str; parse_str($s ...

  6. Nginx部署部分https与部分http【转】

    转自 Nginx部署部分https与部分http - na_tion的专栏 - 博客频道 - CSDN.NEThttp://blog.csdn.net/na_tion/article/details/ ...

  7. Centos查看端口占用和关闭端口

    Centos查看端口占用情况命令,比如查看80端口占用情况使用如下命令:   lsof -i tcp:80   列出所有端口   netstat -ntlp   1.开启端口(以80端口为例)     ...

  8. /bin、/sbin、/usr/bin、/usr/sbin目录Linux执行文档的区别

    /bin./sbin./usr/bin./usr/sbin目录的区别   在linux下我们经常用到的四个应用程序的目录是/bin./sbin./usr/bin./usr/sbin .而四者存放的文件 ...

  9. mac os版本Intellij IDEA 搭建spring mvc的maven工程(新手教学)

    由于近期换了新公司,又换mac pro作为新电脑,打算把用了很多年的eclipse换成IDEA(IDEA比eclipse的好处我就不多说了),由于mac os和IDEA刚开始用不久,所以专门用一篇博客 ...

  10. Python+Selenium 自动化实现实例-获取测试对象的Css属性

    #coding:utf-8 '''获取测试对象的css属性场景 当你的测试用例纠结细枝末节的时候,你就需要通过判断元素的css属性来验证你的操作是否达到了预期的效果.比如你可以通过判断页面上的标题字号 ...