右侧是1。维护的同时保持最短路p值至少,我有直接存款(1-p)。该概率不满足,为了使这个值极大。

  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <cstring>
  4. #include <string>
  5. #include <cstdio>
  6. #include <cmath>
  7. #include <algorithm>
  8. #include <vector>
  9. #include <queue>
  10. #include <map>
  11. #define inf 0x3f3f3f3f
  12. #define eps 1e-6
  13. #define ll long long
  14. const int maxn=100010;
  15. const int maxm=100010;
  16. using namespace std;
  17.  
  18. struct node
  19. {
  20. int v,w,next;
  21. double p;
  22. }e[maxm<<1];
  23. int vis[maxn],h,head[maxn],n,m,d[maxn],pre[maxn];
  24. double p[maxn];
  25.  
  26. void addedge(int a,int b,double c)
  27. {
  28. e[h].v=b;
  29. e[h].w=1;
  30. e[h].p=c;
  31. e[h].next=head[a];
  32. head[a]=h++;
  33. }
  34.  
  35. void spfa(int s)
  36. {
  37. int x,v,i;
  38. for(i=0;i<=n;i++)
  39. p[i]=0,d[i]=inf;
  40. memset(vis,0,sizeof vis);
  41. memset(pre,-1,sizeof pre);
  42. p[s]=1,vis[s]=1,d[s]=0;
  43. queue<int> q;
  44. q.push(s);
  45. while(!q.empty())
  46. {
  47. x=q.front();
  48. q.pop();
  49. vis[x]=0;
  50. for(i=head[x];i!=-1;i=e[i].next)
  51. {
  52. v=e[i].v;
  53. if(d[v]>d[x]+1)
  54. {
  55. d[v]=d[x]+1;
  56. p[v]=p[x]*e[i].p;
  57. pre[v]=x;
  58. if(!vis[v])
  59. {
  60. vis[v]=1;
  61. q.push(v);
  62. }
  63. }
  64. else if(d[v]==d[x]+1)
  65. {
  66. if(p[v]<p[x]*e[i].p)
  67. {
  68. p[v]=p[x]*e[i].p;
  69. pre[v]=x;
  70. if(!vis[v])
  71. {
  72. vis[v]=1;
  73. q.push(v);
  74. }
  75. }
  76. }
  77. }
  78. }
  79. return ;
  80. }
  81. int flag;
  82. void output(int x)
  83. {
  84. if(pre[x]!=-1)
  85. output(pre[x]);
  86. if(flag) flag=0;
  87. else putchar(' ');
  88. printf("%d",x);
  89. }
  90.  
  91. int main()
  92. {
  93. int a,b,s,t;
  94. double c;
  95. while(~scanf("%d%d",&n,&m))
  96. {
  97. h=0;
  98. memset(head,-1,sizeof head);
  99. scanf("%d%d",&s,&t);
  100. while(m--)
  101. {
  102. scanf("%d%d%lf",&a,&b,&c);
  103. addedge(a,b,1-c/100);
  104. addedge(b,a,1-c/100);
  105. }
  106. spfa(s);
  107. printf("%d %.8lf\n",d[t]+1,1-p[t]);
  108. flag=1;
  109. output(t);
  110. puts("");
  111. }
  112. return 0;
  113. }

版权声明:本文博主原创文章。博客,未经同意不得转载。

URAL 1934 Black Spot --- 最短的简单修改的更多相关文章

  1. URAL 1934 Black Spot(最短路)

    Black Spot Time limit: 1.0 secondMemory limit: 64 MB Bootstrap: Jones's terrible leviathan will find ...

  2. URAL 1934 spfa算法

    D - Black Spot Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Subm ...

  3. 简单修改hosts文件加快打开网页速度

    这个电脑小技巧的帖子菲菲博客分享如何通过简单一招利用修改系统的hosts文件来实现有效加快浏览器打开网页的速度.尤其是网络繁忙时DNS服务器负担加重的时候效果特别明显,有兴趣就和菲菲一起来学习一下吧, ...

  4. 简单修改 MySQL 的 root 账号密码

    首先这是一篇非常非常初级的教程. 平时为了方便,经常是直接在网上下载 PHP + MySQL 的集成环境,但有一些 MySQL 的 root 账号是没有密码的(例如大名鼎鼎的 XAMPP 就是这样), ...

  5. UIAlertController 简单修改title以及按钮的字体颜色

    苦逼的开发者,最终败给了一个任性的UI,系统原生UIAlertController的按纽颜色必须改.于是,开始了不归路.之前的版本是自己用view写的一个仿系统UIActionSheet,动画感觉都挺 ...

  6. 富文本编辑器UEditor自定义工具栏(三、自定义工具栏功能按钮图标及工具栏样式简单修改)

    导读 富文本编辑器UEditor提供丰富了定制配置项,如果想设置个性化的工具栏按钮图标有无办法呢?答案是肯定的!前两篇博文简要介绍了通过将原工具栏隐藏,在自定义的外部按钮上,调用UEditor各命令实 ...

  7. 【原创】Java基础之简单修改jar包中的class

    有时需要修改很多jar(假设这些jar都位于lib目录)中其中一个jar中的某一个类,而且又没有原始代码或ide,这时最简单的方式是: 1 进入lib目录 # cd lib # ls test.jar ...

  8. webpack简单修改版本号(单页面)

    写了一个js文件,可以尽量最简单的修改版本号 package.json配置: updateV.js放置位置: updateV.js: var fs = require('fs'); //文件读写 va ...

  9. 简单修改cramfs

    首先进入root用户,确保LINUX系统下装有cramfsprogs,没有的话get-apt install cramfsprogs, 找到.cramfs文件,输入命令cramfsck -x song ...

随机推荐

  1. centos7里默认python升级到2.7.11

    CentOS镜像使用帮助 http://mirrors.163.com/.help/centos.html   安装gcc yum install gcc* openssl openssl-devel ...

  2. 使用HashMap须要注意的事儿:不要暴露Map.entry给外部不可信代码Map.entrySet()

    Map/HashMap是java中一种非经常常使用的数据结构,一般我们在应用中做的事情就是调用put向容器写入数据或者是get从容器读取数据. Map.entrySet()这种方法返回了键值对的集合, ...

  3. 什么是Java “实例化”

    实例化:对象也是引用数据类型,只能使用new运算符从堆中分配内存: 使用已经定义好的类,创建该类对象的过程称为“实例化”. 只有先实例化类的对象,才可以访问到类中的成员(属性和方法). 使用成员运算符 ...

  4. OCP读书笔记(10) - 使用闪回技术I

    使用闪回技术查询数据 闪回查询:就是查询表在过去某个时间点的数据,所用到的技术就是undo数据 SQL> conn scott/tiger 创建测试表 SQL> create table ...

  5. M I S 开发与管理

    今天是开学的第一天,很意外的一天没课.但是我知道还有很多事情在等待这我,不能懈怠!安排好计划,把重要不紧急的事情逐渐蚕食掉,切不可养虎为患,等拖到它变成重要紧急事件后,那就后悔莫及了. 下午看了看自考 ...

  6. SCU 3132(博弈)

    传送门:windy和水星 -- 水星游戏 1 题意:在一张由 n*m 的格子组成的棋盘上放着 k 个骑士每个骑士的位置为(xi,yi),表示第xi行,第yi列骑士如果当前位置为(x,y),一步可以走的 ...

  7. [android]APP启动界面——SplashActivity

    概念 当前应用程序在启动的时候都会有一个展示自己公司LOGO和APP名字的界面.这个界面成为SplashActivity. 布局 <? xml version="1.0" e ...

  8. WPF案例 (三) 模拟QQ“快速换装"界面

    原文:WPF案例 (三) 模拟QQ"快速换装"界面 这个小程序使用Wpf模拟QQ快速换装页面的动画特效,通过使用组合快捷键Ctrl+Left或Ctrl+Right,可实现Image ...

  9. Python 类继承,__bases__, __mro__, super

    Python是面向对象的编程语言,也支持类继承. >>> class Base: ... pass ... >>> class Derived(Base): ... ...

  10. RequireJS和JQuery的模块化编程

    基于RequireJS和JQuery的模块化编程 由于js的代码逻辑越来越重,一个js文件可能会有上千行,十分不利于开发与维护.最近正在把逻辑很重的js拆分成模块,在一顿纠结是使用requirejs还 ...