GDKOI2016 Day1 T2 不稳定的传送门
来源:互联网 发布:花生日记app淘宝 编辑:程序博客网 时间:2024/06/05 17:14
T2 不稳定的传送门
给出N个点,点与点之间由单向边连接,每条边有使用的代价和成功的概率,若失败则返回出发点。每条边只能使用一次。数据保证没有环,点i与i+1之间一定有一条成功概率为100%的边,求从1走到N的最小期望花费。
神奇的概率题。设F[i]表示从i到N的最小期望,对于从i出去的确定顺序的每一条边,
考虑化简这个这个式子,设
对于相邻的两条边i,j。设Si表示先放i的期望,Sj表示先放j的期望,则
消去相同项,
如果先放i比先放j更优的话,则
代入原项,得
可以证明对于不相邻的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 doubleusing 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 不稳定的传送门
- [GDKOI2016] Day1 不稳定的传送门 结论
- [GDKOI2016]不稳定的传送门
- [GDKOI2016]不稳定的传送门
- 【GDKOI2016】不稳定的传送门Code&Details
- GDKOI2016Day1第二题 不稳定的传送门 解题报告
- GDKOI2016 Day1 T3 寻宝
- GDKOI2016 Day2 T2 QT与泰剧
- [GDKOI2016] Day1 魔卡少女 线段树
- NOI2010.Day1.T2.超级钢琴
- NOIP2011 day1 T2 选择客栈
- [NOIP2015]Day1 T2 信息传递
- 济南学习 Day1 T2 pm
- noi2015 day1 T2软件包管理器
- GDKOI2016
- NOI 2015 DAY1 T2 软件包管理器 树链剖分
- NOI 2015 day1 T2 软件包管理器
- 【NOIP2014 Day1 T2】联合权值
- 解压GZIP加密后的Response
- hdu 4586 概率dp
- vm10下载
- GridView+ImageSwitcher实现的图片切换(左滑右滑切换)
- STL中set使用
- GDKOI2016 Day1 T2 不稳定的传送门
- HDU 2066 一个人的旅行(spfa)
- 【GDKOI2016】寻宝Code&Details
- 1030. 完美数列(25)
- matlab strcmp
- 向量集
- 加载storyboard,并设置根控制器
- 华为EMUI4.0 基于android 6.0的bug
- POJ 2352 Stars(树状数组)