3470: Freda’s Walk

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 42  Solved: 22

Description

雨后的Poetic Island空气格外清新,于是Freda和Rainbow出来散步。 Poetic Island的交通可以看作一张n个点、m 边的有向无环图。由于刚下过雨,每条边都有一个积水深度,而恰好Freda 和Rainbow都喜欢踩水玩儿,于是Ta们从某个点出发,选择走向哪条边的概率与该边的积水深度是成正比的。即:如果Freda和Rainbow现在在点u,点u 出发的所有边的积水深度之和为s,从u到v的边积水深度为w,那么Ta们选择走向v的概率就是 w/s。  
Ta们会一直走下去,直到到达一个没有出边的点,那么散步的路程长度就是走过的边的数量。更特殊的是,Freda和Rainbow在出发之前还可以选择一条边,在散步过程中无视这条边的存在(当然也可以不选择)。请你帮忙计算一下,Ta 们从0号点出发,散步的路程长度的期望值最大是多少?

Input

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

Output

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

Sample Input

4 5
0 1 2
0 2 1
0 3 3
1 3 1
2 3 4

Sample Output

2.000000

HINT

对于  100% 的数据,2<=n<=10000,1<=m<=100000,0<=u,v<n,1<=w<=1000。

Source

Adera 2 杯省选模拟赛

【分析】

  测试考这题。。错误打法 考场上竟然AC了【黑人问号脸??

  也算给自己提个醒吧,DAG和树终究是不一样的。不能f[i][0]和f[i][1]表示后面割还是没割,比如:

  

  割3后面那条边是f[2][1]和f[3][1],但是不会让他们转移到f[1][1],因为你规定只有一个儿子可以选割,但是是可以的,因为只是个割了3下面那条边。。

  所以这个方法不行。

  考虑割一条边对答案的影响。

  假设割x->y,只会影响f[x]以及1到x路径上的点。

  但是我们只需要知道x的f值的改变对1这个点的f值的影响。

  假设从1走到x的概率是p,假设那么f[1]会增加(f[x]'-f[x])*p,直接枚举割哪条边然后计算出这个求max就好了。

  【ORZORZORZ...

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<iostream>
 5 #include<algorithm>
 6 #include<cmath>
 7 using namespace std;
 8 #define Maxn 100010
 9 #define Maxm 1000010
10
11 struct node
12 {
13     int x,y,c,next,p;
14 }t[Maxm],tt[Maxm];
15 int first[Maxn],len;
16 int d[Maxn];
17
18 int ft[Maxn];
19 void ins(int x,int y,int c)
20 {
21     t[++len].x=x;t[len].y=y;t[len].c=c;
22     t[len].next=first[x];first[x]=len;t[len].p=1;
23     tt[len].x=y;tt[len].y=x;tt[len].c=c;tt[len].next=ft[y];ft[y]=len;
24 }
25
26 bool vis[Maxn];
27 double g[Maxn];
28 void dfs2(int x)
29 {
30     if(vis[x]) return;vis[x]=1;
31     if(x==1) {g[x]=1;return;}
32     for(int i=ft[x];i;i=tt[i].next)
33     {
34         int y=tt[i].y;
35         dfs2(y);
36         g[x]+=g[y]*tt[i].c*1.0/d[y];
37     }
38 }
39
40 double f[Maxn];
41 void dfs(int x)
42 {
43     if(vis[x]) return;vis[x]=1;
44     f[x]=0;
45     for(int i=first[x];i;i=t[i].next) if(t[i].p)
46     {
47         int y=t[i].y;
48         dfs(y);
49         f[x]+=(f[y]+1)*t[i].c*1.0/d[x];
50     }
51     return;
52 }
53
54 int main()
55 {
56     int n,m;
57     scanf("%d%d",&n,&m);
58     len=0;
59     memset(first,0,sizeof(first));
60     memset(ft,0,sizeof(ft));
61     for(int i=1;i<=m;i++)
62     {
63         int x,y,c;
64         scanf("%d%d%d",&x,&y,&c);
65         x++;y++;
66         d[x]+=c;
67         ins(x,y,c);
68     }
69     memset(vis,0,sizeof(vis));
70     for(int i=1;i<=n;i++) g[i]=0;
71     for(int i=1;i<=n;i++) dfs2(i);
72     memset(vis,0,sizeof(vis));
73     dfs(1);
74     double mx=f[1];
75     for(int i=1;i<=len;i++)
76     {
77         int x=t[i].x,y=t[i].y;
78         double ad;
79         if(d[x]!=t[i].c) ad=(f[x]*d[x]*1.0/(d[x]-t[i].c)-(f[y]+1)*t[i].c*1.0/(d[x]-t[i].c))-f[x];
80         else ad=-f[x];
81         mx=max(mx,f[1]+g[x]*ad);
82     }
83     printf("%.6lf\n",mx);
84     return 0;
85 }

View Code

2017-04-24 18:51:22

转载于:https://www.cnblogs.com/Konjakmoyu/p/6758374.html

【BZOJ 3470】3470: Freda’s Walk 期望相关推荐

  1. BZOJ 3470 Freda’s Walk (期望)

    3470: Freda's Walk Time Limit: 1 Sec Memory Limit: 128 MB Description 雨后的Poetic Island空气格外清新,于是Freda ...

  2. bzoj3470 Freda's Walk (期望概率DP)

    bzoj3470 Freda's Walk 原题地址:http://www.lydsy.com/JudgeOnline/problem.php?id=3470 题意: 有向无环图,求从点0出发,走到一 ...

  3. 【BZOJ3470】Freda’s Walk 概率与期望

    [BZOJ3470]Freda's Walk Description 雨后的Poetic Island空气格外清新,于是Freda和Rainbow出来散步. Poetic Island的交通可以看作一 ...

  4. BZOJ 3470: Freda’s Walk

    没人写题解的样子.. 有生之年第一次刷了个rank1 望dalao们轻虐 正着走一遍 然后求出从1到每个点的概率g 反着走一遍 求出每个点对1的贡献f(过程跟求期望没什么两样) 最后考虑割一条边 算一 ...

  5. BZOJ 2134 单选错位(数学期望)【BZOJ 修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2134 是 hydro 的 BZOJ ...

  6. 【BZOJ】1076 [SCOI2008]奖励关 期望DP+状压DP

    [题意]n种宝物,k关游戏,每关游戏给出一种宝物,可捡可不捡.每种宝物有一个价值(有负数).每个宝物有前提宝物列表,必须在前面的关卡取得列表宝物才能捡起这个宝物,求期望收益.k<=100,n&l ...

  7. [BZOJ 1076][SCOI2008]奖励关(期望+状压Dp)

    Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物, 每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的 ...

  8. BZOJ 1076: [SCOI2008]奖励关 [DP 期望 状压]

    传送门 题意:$n$种宝物,出现$k$次每次一种,每种宝物有价值和吃掉它之前必须要吃掉的宝物的集合,求采取最优策略的期望最大价值 1<=k<=100,1<=n<=15,分值为[ ...

  9. bzoj 1076 奖励关 状压+期望dp

    因为每次选择都是有后效性的,直接dp肯定不行,所以需要逆推. f[i][j]表示从第i次开始,初始状态为j的期望收益 #include<cstdio> #include<cstrin ...

最新文章

  1. 一张图看懂中科大、国科大、中科院、社科院、上科大之间的关系
  2. 某程序员leader吐槽自己的工作就是合并周报!撕逼扯淡!跪舔领导!月薪五万却非常焦虑!...
  3. bootstrap4简单使用和入门01-简单表单的使用
  4. Thinkphp怎样修改模板标签定界符
  5. 计算机5G英语文献,5G移动网络外文文献翻译2018中英文.docx
  6. 各种数据结构性能的比较
  7. java 锁旗标_Java多线程
  8. Django之项目搭建和配置总结(一)
  9. 计算机网络之网络层:9、BGP协议
  10. javascript最新版本_什么是JavaScript!
  11. mysql进阶,03-事务2-多个客户端一起操作时的情况
  12. 零基础学sql要多久_零基础如何学习游戏3D建模,要学些什么内容?学多久?
  13. html实现在线展示pdf文件,在html页面中展示pdf文件,实现在线阅读
  14. 摄氏温度和华氏温度换算(vb源码)
  15. (20200328已解决)[dockerfile] debconf: delaying package configuration, since apt-utils is not installed
  16. oled屏幕(IIC接口+1306驱动)+raspberrypi pico 显示基于RT-Thread
  17. 赣南师范大学数学与计算机科学学院张志超,张志超 - 南京信息工程大学 - 数学与统计学院...
  18. 经纬高坐标系转到东北天坐标系
  19. Python实例---爬取下载喜马拉雅音频文件
  20. Windows 10 2019 十一月版官方镜像下载

热门文章

  1. shell脚本编程笔记(十)—— 正则表达式
  2. 利用计算机模拟人类的活动属于,赠书 | 计算机能模拟人类心智吗?
  3. 量子计算机技术难,量子计算机是什么工作原理运行的?现在制造还存在什么技术上的难...
  4. 吃海鲜搭配什么菜好 搭配这些健康又美味
  5. C语言Matrix编程题——[Recursion]D. Liang 8.1 Computing factorials
  6. 800名科学家联名反对统计学意义,放弃P值“决定论”!
  7. JS检查日期是否为工作日
  8. 中国知网caj转pdf的免费转换方法
  9. 自行車基本知識 (zz)
  10. 英语写计算机作文600字,介绍电脑 computer 英语作文