题意:

  n个点m条边的有向图,每一天每条边存在的概率都是p,在最优策略下,询问从1到n的期望天数。

分析:

  dijkstra。

  每次一定会优先选dp最小的后继走,如果这条边不存在,选次小的,以此类推。

  dp[i]表示从i开始到n的期望天数,从后往前推,每次取出dp最小的,更新其他点。

代码:

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cctype>
#include<cmath>
#include<set>
#include<map>
#include<vector>
#include<queue>
#include<bitset>
#define pa pair<double,int>
#define fore(i, u, v) for (int i = head[u], v = e[i].to; i; i = e[i].nxt, v = e[i].to)
using namespace std;
typedef long long LL; inline int read() {
int x=,f=;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
for(;isdigit(ch);ch=getchar())x=x*+ch-'';return x*f;
} const int N = ;
struct Edge { int to, nxt; double w; } e[N << ];
int head[N], En, n, m;
double P[N], dp[N], sp[N], s[N], tp[N];
bool vis[N]; inline void add_edge(int u,int v,int w) {
++En; e[En].to = v, e[En].w = 1.0 * w / 100.0, e[En].nxt = head[u]; head[u] = En;
}
void Dijkstra() {
priority_queue< pa, vector< pa >, greater< pa > > q;
for (int i = ; i <= n; ++i) dp[i] = 1e18, tp[i] = 1.0;
q.push(pa(, n)); dp[n] = ;
while (!q.empty()) {
int u = q.top().second; q.pop();
if (vis[u]) continue; vis[u] = ;
fore(i, u, v) {
double sum = s[v] + dp[u] * e[i].w * tp[v];
double sump = sp[v] + e[i].w * tp[v];
if (dp[v] > (sum + 1.0) / sump) {
dp[v] = (sum + 1.0) / sump;
s[v] += dp[u] * e[i].w * tp[v];
sp[v] += e[i].w * tp[v];
tp[v] *= ( - e[i].w);
q.push(pa(dp[v], v));
}
}
}
printf("%.3lf\n", dp[]);
}
int main() {
n = read(), m = read();
for (int u, v, w, i = ; i <= m; ++i)
u = read(), v = read(), w = read(), add_edge(v, u, w);
Dijkstra();
return ;
}

校内模拟赛 虫洞(by NiroBC)的更多相关文章

  1. 校内模拟赛 旅行(by NiroBC)

    题意: n个点的无向图,Q次操作,每次操作可以连接增加一条边,询问两个点之间有多少条边是必经之路.如果不连通,输出-1. 分析: 首先并查集维护连通性,每次加入一条边后,如果这条边将会连接两个联通块, ...

  2. 【20170521校内模拟赛】热爱生活的小Z

    学长FallDream所出的模拟赛,个人感觉题目难度还是比较适中的,难度在提高+左右,可能比较接近弱省省选,总体来讲试题考查范围较广,个人认为还是很不错的. 所有试题如无特殊声明,开启-O2优化,时限 ...

  3. hzwer模拟赛 虫洞

    [题目描述] N个虫洞,M条单向跃迁路径.从一个虫洞沿跃迁路径到另一个虫洞需要消耗一定量的燃料和1单位时间.虫洞有白洞和黑洞之分.设一条跃迁路径两端的虫洞质量差为delta. 1.从白洞跃迁到黑洞,消 ...

  4. 【最短路】NOIP模拟赛 虫洞

    虫洞 [题目描述] N个虫洞,M条单向跃迁路径.从一个虫洞沿跃迁路径到另一个虫洞需要消耗一定量的燃料和1单位时间.虫洞有白洞和黑洞之分.设一条跃迁路径两端的虫洞质量差为delta. 1. 从白洞跃迁到 ...

  5. NOIP模拟赛 虫洞

    [题目描述] John在他的农场中闲逛时发现了许多虫洞.虫洞可以看作一条十分奇特的有向边,并可以使你返回到过去的一个时刻(相对你进入虫洞之前).John的每个农场有M条小路(无向边)连接着N (从1. ...

  6. [noip模拟赛]虫洞holes<SPFA>

    虫洞(holes.cpp/c/pas) [题目描述] N个虫洞,M条单向跃迁路径.从一个虫洞沿跃迁路径到另一个虫洞需要消耗一定量的燃料和1单位时间.虫洞有白洞和黑洞之分.设一条跃迁路径两端的虫洞质量差 ...

  7. Java实现蓝桥杯第十一届校内模拟赛

    有不对的地方欢迎大佬们进行评论(ง •_•)ง 多交流才能进步,互相学习,互相进步 蓝桥杯交流群:99979568 欢迎加入 o( ̄▽ ̄)ブ 有一道题我没写,感觉没有必要写上去就是给你多少MB然后求计 ...

  8. 【20170920校内模拟赛】小Z爱学习

    所有题目开启-O2优化,开大栈空间,评测机效率为4亿左右. T1 小 Z 学数学(math) Description ​ 要说小 Z 最不擅长的学科,那一定就是数学了.这不,他最近正在学习加法运算.老 ...

  9. 校内模拟赛 Zbq's Music Challenge

    Zbq's Music Challenge 题意: 一个长度为n的序列,每个位置可能是1或者0,1的概率是$p_i$.对于一个序列$S$,它的得分是 $$BasicScore=A\times \sum ...

随机推荐

  1. 小程序 青少儿书画 利用engineercms作为服务端

    因为很多妈咪们喜欢发布自己宝宝的作品,享受哪些美好时刻,记录亲子创作过程. 为了方便妈咪们展示亲子创作,比如宝宝们画作,涂鸦,书法,作文,其他才艺,特利用engineercms作为服务端,重新设计了一 ...

  2. Android Java中的一些使用例子

    connectivity= ConnectivityService.getInstance(context); ServiceManager.addService(Context.CONNECTIVI ...

  3. [20170825]11G备库启用DRCP连接3.txt

    [20170825]11G备库启用DRCP连接3.txt --//昨天测试了11G备库启用DRCP连接,要设置alter system set audit_trail=none scope=spfil ...

  4. 基于Bootstrap表单验证

    基于Bootstrap表单验证 GitHub地址:https://github.com/chentangchun/FormValidate 使用方式: 1.CSS样式 .valierror { bor ...

  5. json数据 二级联动

    <head> <link href="static/bootstrap-3.3.5-dist/css/bootstrap.css" rel="style ...

  6. 【爬坑】DataNode 无法正常启动解决方案

    0. 说明 DataNode 无法正常启动的原因 & 解决方案 1. 原因一 在 start-all.sh 之后 DataNode 无法正常启动,单独启动也启动不了 可能的原因 多次格式化,导 ...

  7. iOS命名规范(转载)

    转载地址:http://www.cnblogs.com/qiqibo/archive/2012/09/05/2671553.html 正文: • 格式化代码 ◦ 指针“*”号的位置 ▪ 如:NSStr ...

  8. 个人技术博客--团队Git规范(参考西瓜学长)

    援引西瓜学长:GitHub团队项目合作流程 废话少说直接写 1.fork 1.对于组员来说第一步就是fork 2.点击fork之后 上面是我们的团队仓库 切换回自己的仓库 就会看到 是fork于团队仓 ...

  9. 【转】struct和typedef struct在C/C++中的区别

    分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可 ...

  10. Handler基本运行机制

    Handler,Looper,MessageQueue的基本原理(三个组成一个消息处理机制)最大的作用就是实现线程间的通信 Handler负责把消息对象加入到消息队列当中 Looper(循环器)是一个 ...