CF605E Intergalaxy Trips

考虑你是不知道后来的边的出现情况的,所以可以这样做:每天你都选择一些点进行观察,知道某天往这些点里面的某条边可用了,你就往这条边走。这样贪心总是对的。

我们定义一个点的权值就是这个点到 $ n $ 的期望距离。同时它就是我们要算的答案。

但是注意到一个性质,我们总是从期望较大的点走向期望较小的点(显然的)。

所以我们可以类似反过来的 dijkstra 的更新,维护当前权值的点,然后这个点当前的值就必然是最终这个点的答案。所以我们可以拿它去更新到达它的点。

加入我们当前打算使用点 $ u $ 当前我们要考虑所有可以到达 $ u $ 的点,这些点已经被某些其他点更新过了。但是我们知道更新这些点的点肯定比 $ u $ 小。我们考虑当前枚举一个点 $ v $ ,然后尝试用 $ u $ 去更新 $ v $ 。注意 $ v $ 已经被一些点(设为 $ a_{1\dots n} $) 更新过了,并且 $ a_{1\dots n} $ 的权值都小于 $ u $ 。

这个时候我们考虑某一天,要么 $ v $ 到 $ a_{1\dots n} $ 至少一个点有边,这种情况下无论 $ v $ 到 $ u $ 是否有边都会走到 $ a_{1\dots n} $ 。所以真正能够通过 $ v $ 走到 $ u $ 的情况是某一天 $ v $ 到 $ u $ 有边并且到其他的点没边。

注意任意选择一个前缀时,等在这个地方的概率不同,是需要计算进去的。

注意 $ n $ 只有 $ 10^3 $,可以直接跑 $ O(n^2) $ 的 dijkstra 跑过去。

#include "iostream"
#include "algorithm"
#include "cstring"
#include "cstdio"
#include "queue"
using namespace std;
#define MAXN 1006
int n;
double p[MAXN][MAXN];
double dp[MAXN] , tmp[MAXN] , f[MAXN];
int vis[MAXN];
int main() {
cin >> n;
for( int i = 1 ; i <= n ; ++ i )
for( int j = 1 , q ; j <= n ; ++ j ) scanf("%d",&q) , p[i][j] = 1.0 * q / 100;
for( int i = 1 ; i <= n ; ++ i ) dp[i] = 3e18 , tmp[i] = 1;
dp[n] = 0;
for( int i = 1 , u = 0 ; i <= n ; ++ i ) {
double mn = 3e18;
for( int j = 1 ; j <= n ; ++ j ) if( !vis[j] && dp[j] < mn ) mn = dp[j] , u = j;
vis[u] = 1;
for( int v = 1 ; v <= n ; ++ v ) if( !vis[v] && p[v][u] > 1e-8 ) {
double ls = 1 - tmp[v]; tmp[v] *= 1.0 - p[v][u];
double t = ls / ( 1 - tmp[v] ); // 在这个点的情况中,其他边出现至少一条的概率 / 当前边加入后至少出现一条的概率
double r1 = t * f[v] , r2 = ( 1 - t ) * dp[u]; // 两种情况,要么按照以前的边有出现,要么只有新加入的边出现
f[v] = r1 + r2;
dp[v] = min( dp[v] , f[v] + 1 / ( 1 - tmp[v] )); // 考虑等着
}
}
printf("%.7lf",dp[1]);
}

CF605E Intergalaxy Trips的更多相关文章

  1. CF605E Intergalaxy Trips 贪心 概率期望

    (当时写这篇题解的时候,,,不知道为什么,,,写的非常冗杂,,,不想改了...) 题意:一张有n个点的图,其中每天第i个点到第j个点的边都有$P_{i, j}$的概率开放,每天可以选择走一步或者留在原 ...

  2. 【CF605E】Intergalaxy Trips(贪心,动态规划)

    [CF605E]Intergalaxy Trips(贪心,动态规划) 题面 Codeforces 洛谷 有\(n\)个点,每个时刻第\(i\)个点和第\(j\)个点之间有\(p_{ij}\)的概率存在 ...

  3. CF#335 Intergalaxy Trips

     Intergalaxy Trips time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  4. CodeForces 605 E. Intergalaxy Trips

    E. Intergalaxy Trips time limit per test:2 seconds memory limit per test:256 megabytes input:standar ...

  5. [Codeforces]605E Intergalaxy Trips

    小C比较棘手的概率期望题,感觉以后这样的题还会贴几道出来. Description 给定一个n*n的邻接矩阵,邻接矩阵中元素pi,j表示的是从 i 到 j 这条单向道路在这一秒出现的概率百分比,走一条 ...

  6. Intergalaxy Trips CodeForces - 605E (期望,dijkstra)

    大意: 给定矩阵$p$, $p_{i,j}$表示每一秒点$i$到点$j$有一条边的概率, 每秒钟可以走一条边, 或者停留在原地, 求最优决策下从$1$到$n$的期望用时. $f_x$为从$x$到$n$ ...

  7. E. Intergalaxy Trips

    完全图,\(1 \leq n \leq 1000\)每一天边有 \(p_{i,j}=\frac{A_{i,j}}{100}\) 的概率出现,可以站在原地不动,求 \(1\) 号点到 \(n\) 号点期 ...

  8. [LeetCode] Trips and Users 旅行和用户

    The Trips table holds all taxi trips. Each trip has a unique Id, while Client_Id and Driver_Id are b ...

  9. 【Leetcode-Mysql】Trips and Users

    思路不总结了,看过题目自己尝试过之后,看下方代码应该能理解的 SELECT Request_at AS DAY, round( sum( CASE WHEN STATUS = 'completed' ...

随机推荐

  1. 在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务

    在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务 https://procodeguide.com/programming/polly-in-aspnet-core ...

  2. [no code][scrum meeting] Beta 10

    $( "#cnblogs_post_body" ).catalog() 例会时间:5月25日15:00,主持者:伦泽标 下次例会时间:5月26日11:30,主持者: 一.工作汇报 ...

  3. 第四单元博客总结——暨OO课程总结

    第四单元博客总结--暨OO课程总结 第四单元架构设计 第一次UML作业 简单陈述 第一次作业较为简单,只需要实现查询功能,并在查询的同时考虑到性能问题,即我简单的将每一次查询的结果以及递归的上层结果都 ...

  4. 启动Dubbo项目注册Zookeeper时提示zookeeper not connected异常原理解析

    文/朱季谦 遇到一个很诡异的问题,我在启动多个配置相同zookeeper的Dubbo项目时,其他项目都是正常启动,唯独有一个项目在启动过程中,Dubbo注册zookeeper协议时,竟然出现了这样的异 ...

  5. 同人逼死官方系列!基于sddc 协议的SDK框架 sddc_sdk_lib 解析

    基于sddc 协议的SDK框架 sddc_sdk_lib 解析 之前在移植 libsddc 库的时候感觉官方 demo 太低效了( ̄. ̄),复制粘贴代码好累,而且写出一个BUG,其他复制的代码整个就裂 ...

  6. binary-tree-maximum-path-sum leetcode C++

    Given a binary tree, find the maximum path sum. The path may start and end at any node in the tree. ...

  7. WSL2学习和使用汇集

    接触WSL2过程中整理沉淀的一些知识点,大纲如下,内容比较多,详细内容参考https://www.yuque.com/wushifengcn/kb/mbg1b5 欢迎感兴趣者补充和提出问题,共同学习. ...

  8. sprint boot 手动快速创建web应用(2)

    1.打开Eclipse新建maven项目 2.导入maven依赖 <parent> <groupId>org.springframework.boot</groupId& ...

  9. Mysql教程:(五)多表查询

    多表查询 select name,student.class,student.number,maths,chinese,english from student,score where student ...

  10. 第二课 Dubbo设计的架构设计

    总体架构 Dubbo的总体架构,如图所示: Dubbo框架设计一共划分了10个层,而最上面的Service层是留给实际想要使用Dubbo开发分布式服务的开发者实现业务逻辑的接口层.图中左边淡蓝背景的为 ...