bzoj3470 Freda’s Walk

原题地址:http://www.lydsy.com/JudgeOnline/problem.php?id=3470

题意:
有向无环图,求从点0出发,走到一个出度为0的点停止,点u出发的所有边的权值之和为s,从u到v的边的权值为w,走向v的概率就是 w/s。可以任意删一条边(也可不删边),求最长期望路径长度。

因为是权限题,贴一下输入输出
Input

第一行两个正整数 n、m。
接下来m行每行三个整数u、v、w,表示从u到v有一条无向边,边权w。

Output

输出路程长度的最大期望值,四舍五入保留六位小数。

Sample Input

4 5

0 1 2

0 2 1

0 3 3

1 3 1

2 3 4
Sample Output

2.000000

数据范围
对于 100% 的数据,2<=n<=10000,1<=m<=100000,0<=u,v< n

题解:
这题我最开始想的就是dp[u][0/1] 表示按拓扑序其之后的边 没删过/删过 的,从这个点到停止的期望路径长度。每个dp[u][1]只能取一个dp[v][1]转移过来。答案即在max(f[1][0],f[1][1])
但是,这样是错的。
这里有一个反例:

如果删3—>4这条边 ,当计算f[1]时,对点2,点3,都是 ‘删过’,不能说只取一个f[v][1]。
现在我们不要f[i][0/1]了,定义f[i]为点到停止的期望路径长度(相当于原来的f[i][0])。
为了避免上面的情况,之间先计算出从1点到每个点的概率p[i],则不删边时这个点对于答案的贡献就是p[i]*f[i]。
枚举每个点所有的出边,计算出删除这个点某条出边所得的最大的新期望 f[i]’。对于答案增加的贡献就是 ( f[i]’-f[i] ) * p[i]

所以 ans=f[1]+max( ( f[i]’-f[i] ) * p[i] )

代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#define LL long long
using namespace std;
const int N=10005;
const int M=100005;
int n,m,head[N],to[M],nxt[M],out[N],in[N],w[M],num=0;
int U[M],V[M],W[M];
double f[N][2],p[N],mx;
bool vis[N];
void build(int u,int v,int ww)
{num++;to[num]=v;nxt[num]=head[u];w[num]=ww;head[u]=num;
}
void getp()
{queue<int> Q;for(int i=1;i<=n;i++)if(!in[i]) Q.push(i);while(!Q.empty()){int u=Q.front(); Q.pop();for(int i=head[u];i;i=nxt[i]){int v=to[i];p[v]+=p[u]*(double)w[i]/out[u];in[v]--;if(in[v]==0)Q.push(v);}}
}
void dfs(int u)
{vis[u]=1;for(int i=head[u];i;i=nxt[i]){int v=to[i];if(!vis[v]) dfs(v);if(out[u]) f[u][0]+=(f[v][0]+1)*(double)w[i];}double sum=f[u][0];if(out[u]) f[u][0]=(double)f[u][0]/out[u];if(!out[u]) return;for(int i=head[u];i;i=nxt[i]){   int v=to[i];if(out[u]-w[i]>0) f[u][1]=max(f[u][1],(double)(sum-(f[v][0]+1)*(double)w[i])/(out[u]-w[i]));}mx=max(mx,(f[u][1]-f[u][0])*p[u]);
}
int main()
{freopen("secretbase.in","r",stdin);freopen("secretbase.out","w",stdout);scanf("%d%d",&n,&m);mx=0.0;for(int i=1;i<=m;i++){int u,v,ww;scanf("%d%d%d",&u,&v,&ww);u++,v++; in[v]++;out[u]+=ww;U[i]=u; V[i]=v; W[i]=ww; build(u,v,ww);}   double  ans=0;for(int i=1;i<=n;i++){vis[i]=0; p[i]=0.0;}p[1]=1.0;getp();for(int i=1;i<=n;i++){vis[i]=0; f[i][0]=f[i][1]=0.0;}dfs(1);printf("%0.6lf\n",f[1][0]+mx);return 0;
}

bzoj3470 Freda's Walk (期望概率DP)相关推荐

  1. 【BZOJ 3470】3470: Freda’s Walk 期望

    3470: Freda's Walk Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 42  Solved: 22 Description 雨后的Poe ...

  2. 期望/概率dp 学习报告

    期望dp 期望的基本性质 离散型随机变量和连续型随机变量 例题1:红包发红包 期望的基本运算性质 例题2:Little Pony and Expected Maximum 期望的一些经典题型 图上期望 ...

  3. LightOJ - 1038 Race to 1 Again 基础期望概率 dp

    传送门 刚刚学习期望&概率 我们设数X的期望改变次数为P[X] 如果要求X的期望,很容易想到找x的因子; 可以得到下式  ,cnt为X因子个数,ai为X的因子 可以这么理解,当因子ai为1时, ...

  4. 【BZOJ 4832】 [Lydsy2017年4月月赛] 抵制克苏恩 期望概率dp

    打记录的题打多了,忘了用开维记录信息了......我们用f[i][j][l][k]表示已经完成了i次攻击,随从3血剩j个,2血剩l个,1血剩k个,这样我们求出每个状态的概率,从而求出他们对答案的贡献并 ...

  5. 【LOJ6178】 「美团 CodeM 初赛 Round B」景区路线规划 期望概率DP

    题目链接 LOJ 题解 考虑进行Dp,我们设 f[i][j] f [ i ] [ j ] f[i][j]表示到达节点 i i i消耗了j" role="presentation&q ...

  6. luoguP4206 [NOI2005]聪聪与可可 期望概率DP

    首先,分析一下这个猫和鼠 猫每局都可以追老鼠一步或者两步,但是除了最后的一步,肯定走两步快些.... 既然猫走的步数总是比老鼠多,那么它们的距离在逐渐缩小(如果这题只能走一步反而不能做了...) 猫不 ...

  7. [USACO Hol10] 臭气弹 图上期望概率dp 高斯

    记住一开始和后来的经过是两个事件因此概率可以大于一 #include<cstdio> #include<iostream> #include<cstdlib> #i ...

  8. BZOJ4008. [HNOI2015]亚瑟王 期望概率dp

    看到这道题想什么? 一个好转移的状态由于T最多444所以把每个点控制在O(400000)以内,所以对于n和r最多乘一次因此猜f[n][r],f[r][n],首先一轮一轮的搞不好转移,那么先想一想f[n ...

  9. UvaLive6441(期望概率dp)

    1.涉及负数时同时维护最大和最小,互相转移. 2.考场上最大最小混搭转移WA,赛后发现如果是小的搭小的,大的搭大的就可过,类似这种: db a = (C[i] - W[i]) * dp1[i - 1] ...

最新文章

  1. Redis 日志篇:无畏宕机快速恢复的杀手锏
  2. IC/FPGA大疆笔试题分析(预分析)
  3. 统计学习方法笔记(五)-线性可分支持向量机原理及python实现
  4. SqlServer2014怎样还原数据库
  5. 关于使用jQuery时$(document).ready()方法失效问题
  6. 正则表达式中原子的5种类型
  7. 在代码中实用协程(二)
  8. oracle grid安装看不到config,【图片】【rac11g安装问题】出了问题特来请教各位大侠【oracle吧】_百度贴吧...
  9. MyBlog前端开发
  10. Spring Security xsd 异常
  11. 网站降权原因解析 -转
  12. ANSI, unicode, UTF-8编码详解
  13. Delphi7·ProgressBar控件
  14. 放大图片不失真,不变模糊的方法
  15. 360顽固木马专杀工具 千万别用
  16. 生活就像北京的地铁1
  17. AJAX(七)jsonp实战--天气预报
  18. python做情感分析【中、英文都有】
  19. web服务器基于那个协议,网页浏览服务基于什么协议 Web服务器是基于什么协议...
  20. 牛客NOIP暑期七天营-普及组4 D-火龙果画

热门文章

  1. 一文了解 DoH(DNS-over-HTTPS)和DoT(DNS-over-TLS)
  2. OpenCV4学习记录(一)解决第一步OpenCV4.5.1+VS2019+CMake
  3. php使用phpword教程,使用PHPWord生成word文档
  4. 仿抖音 抖音接口开发文档
  5. css强制换行和超出隐藏实现(单行和多行)
  6. TryHackMe-Gatekeeper
  7. 强化学习-入门教程(完整版)
  8. ElasticSearch入门教程(1)
  9. Python 基于透明元素裁切图片(类似Photoshop)
  10. 简单理解与实验生成对抗网络GAN