T2 不稳定的传送门

给出N个点,点与点之间由单向边连接,每条边有使用的代价和成功的概率,若失败则返回出发点。每条边只能使用一次。数据保证没有环,点i与i+1之间一定有一条成功概率为100%的边,求从1走到N的最小期望花费。

神奇的概率题。设F[i]表示从i到N的最小期望,对于从i出去的确定顺序的每一条边,F[i]=p1∗F[to1]+w1+(1−p1)∗(p2∗F[to2]+w2)+(1−p1)∗(1−p2)∗(p3∗F[to3]+w3)....F[i]=p1 * F[to1]+w1+(1-p1) * (p2 * F[to2]+w2)+(1-p1) * (1-p2) * (p3 * F[to3]+w3)....
考虑化简这个这个式子,设pi∗f[toi]+wi=xi,(1−pi)=yipi*f[toi]+wi=xi,(1-pi)=yi,则原式=x1+y1∗x2+y1∗y2∗x3+...=x1+y1 * x2+y1 * y2 * x3+...
对于相邻的两条边i,j。设Si表示先放i的期望,Sj表示先放j的期望,则
Si=x1+y1∗x2+y1∗y2∗x3+...+y1∗.....∗yi−1∗xi+y1∗...∗yi−1∗yi∗xjSi=x1+y1 * x2+y1 * y2 * x3+...+y1 * .....* yi-1 * xi+y1 * ...* yi-1 * yi * xj
Sj=x1+y1∗x2+y1∗y2∗x3+...+y1∗.....∗yi−1∗xj+y1∗...∗yi−1∗yj∗xiSj=x1+y1 * x2+y1 * y2 * x3+...+y1 * .....* yi-1 * xj+y1 * ...* yi-1 * yj * xi
消去相同项,Si=xi+yi∗xj,Sj=xj+yj∗xiSi=xi+yi*xj,Sj=xj+yj*xi
如果先放i比先放j更优的话,则
xi+yi∗xj<xj+yj∗xixi+yi*xj
yi∗xj−xj<yj∗xi−xiyi*xj-xj
(yi−1)∗xj<(yj−1)∗xi(yi-1)*xj
(yi−1)/xi<(yj−1)/xj(yi-1)/xi
代入原项,得
(1−pi−1)/(pi∗f[toi]+wi)<(1−pj−1)/(pj∗f[toj]+wj)(1-pi-1)/(pi*f[toi]+wi)
pi/(pi∗f[toi]+wi)>pj/(pj∗f[toj]+wj)pi/(pi*f[toi]+wi)>pj/(pj*f[toj]+wj)
可以证明对于不相邻的i和j,也满足这条式子。
发现等号左边只和i有关,等号右边只和j有关,于是我们可以吧这个东西排一次序,这样就得到最优顺序了。然后直接递推就好了。

#include<cstdio>
#include<algorithm>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fd(i,a,b) for(int i=a;i>=b;i--)
#define N 100005
#define M 200005
#define db double
using namespace std;
struct note{int x,y,c;db p,f;
}a[M];
bool cmd(note x,note y) {return x.x<y.x;}
bool cmp(note x,note y) {return x.f>y.f;}
db f[N];
int l[N],r[N],n,m;
int main() {scanf("%d%d",&n,&m);fo(i,1,n-1) scanf("%d",&a[i].c),a[i].x=i,a[i].y=i+1,a[i].p=1;fo(i,n,m+n-1) scanf("%d%d%lf%d",&a[i].x,&a[i].y,&a[i].p,&a[i].c);sort(a+1,a+m+n,cmd);fo(i,1,m+n-1)if (a[i].x!=a[i-1].x) r[a[i-1].x]=i-1,l[a[i].x]=i;r[a[n+m-1].x]=n+m-1;fd(i,n-1,1) {fo(j,l[i],r[i]) a[j].f=a[j].p/(a[j].p*f[a[j].y]+a[j].c);sort(a+l[i],a+r[i]+1,cmp);db x=1;fo(j,l[i],r[i]) {f[i]=f[i]+(f[a[j].y]*a[j].p+a[j].c)*x;x*=(1-a[j].p);}}printf("%.2lf",f[1]);
}

GDKOI2016 Day1 T2 不稳定的传送门相关推荐

  1. NOIP 2017 Day1 T2 时间复杂度 complexity - 模拟题 题解

    作者@豪哒哒哒HaoDaDaDa 转载自简书@豪哒哒哒HaoDaDaDa-简书-NOIP 2017 Day1 T2 时间复杂度 (有一个月没有写简书了-) (这次终于开始拿Markdown写了,富文本 ...

  2. DTOJ2603 不稳定的传送门

    DTOJ2603 不稳定的传送门 题目 题目描述 输入格式 输出格式 样例 样例输入 样例输出 数据范围与提示 题解 题目 题目描述 C国里一共有NNN个城镇,编号为111到NNN 其中第iii个城镇 ...

  3. [GDKOI2016]不稳定的传送门

    题目描述 C 国里一共有 N 个城镇,编号为 1 到 N .其中第 i 个城镇与第 i + 1 个城镇连接着一条收费为 c i 的从 i 到 i + 1 的单向道路 (1 ≤ i < n).现在 ...

  4. 【NOIP 2016】Day1 T2 天天爱跑步

    Problem Description 小 C 同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任 ...

  5. NOIP2012 DAY1 T2 国王游戏

    题目描述 恰逢 H国国庆,国王邀请n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国王站在队伍的最前面 ...

  6. 联合权值 NOIP2014 提高组 Day1 T2

    codevs 3728 联合权值 题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距 ...

  7. noip2016 day1 t2 天天爱跑步

    题目 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵包含 ...

  8. NOI2015 Day1 T2 软件包管理器 树链剖分

    NKOJ3423 NOI2015 软件包管理器 时间限制 : 20000 MS 空间限制 : 524288 KB 问题描述 Linux用户和OS X用户一定对软件包管理器不会陌生.通过软件包管理器,你 ...

  9. 模拟赛DAY1 T2腐草为萤

    2.腐草为萤 (dzy.cpp/c) [题目背景] 纤弱的淤泥中妖冶 颓废在季夏第三月 最幼嫩的新叶连凋零都不屑 何必生离死别 --银临<腐草为萤> [问题描述] 扶苏给了你一棵树,这棵树 ...

最新文章

  1. xilinx生成mcs,下载flash问题解决方法
  2. 哈佛博士教你如何摆脱「尬聊」
  3. mybatis查询时间段sql语句
  4. docker学习系列14 使用haproxy实现mysql集群的负载均衡...
  5. 消息中间件:为什么我们选择 RocketMQ
  6. spring程序开发步骤
  7. Brocade NOS学习笔记(第一章——第三章)
  8. AdminLTE 3.0发布了
  9. LeetCode MySQL 1543. Fix Product Name Format(trim去空格+upper/lower大小写)
  10. 利用shell和iptables实现自动拒绝恶意试探连接SSH服务
  11. 团队作业9——项目验收与总结
  12. discuz模板修改html,Discuz 修改门户的模板——静态页面套用(动态页写死方法以更新)...
  13. Docker离线安装及python算法部署详细介绍
  14. 李泉老师《高级商务礼仪锻造》
  15. 从单体开始的架构演进
  16. 一网统管是什么?管什么,怎么管?通俗易懂
  17. 用yolov5做人脸检测
  18. C++工作笔记-32位和64位程序的区别
  19. 解决:GET http://localhost:**/static/js/jquery.min.js net::ERR_ABORTED 404
  20. 俄语专业个人简历范文

热门文章

  1. 盘点 Redis 常用的 10 个小技巧
  2. 仿生蛇形机器人04、Dynamixel MX-64AR舵机串联实现仿生蛇基本步态
  3. 搭建web邮箱extmail
  4. 文件批量改名和批量替换文件内容
  5. servlet 理解 --servlet笔记
  6. 【课件制作软件】Focusky教程 | *.fs文件怎么打开
  7. Ubuntu安装破解版MATLAB及问题解决
  8. php中文转化为英文,json转码_解决PHP的json_encode处理中文被转码为全英文的方法...
  9. 要么成为顶尖人物,要么跟随顶尖人物
  10. 山东大学计算机科学与技术学院程序设计思维与实践作业 week10-树型数据结构及其应用