Sending Packets LightOJ - 1321 (期望计算)
题面:
Alice and Bob are trying to communicate through the internet. Just assume that there are N routers in the internet and they are numbered from 0 to N-1. Alice is directly connected to router 0 and Bob is directly connected to router N-1. Alice initiates the connection and she wants to send S KB of data to Bob. Data can go to the (N-1)th router from the 0th router either directly or via some intermediate routers. There are some bidirectional links between some routers.
题意:
Alice要通过一个路由器网络发送\(s\)个报文,发送一个报文的时间是\(2*k\),发送一个报文后,收到确定报文后才会发送下一个。发送时的成功几率并非100%,求最后发送完所有报文的期望。
思路:
对于一个路径来说,成功的几率是固定的。
所以将几率用最短路求出即可。
发送第\(x\)个报文成功的期望为:
\]
移项可得:
\]
#include<iostream>
#include<algorithm>
#include<vector>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#define fuck(x) cerr<<#x<<" = "<<x<<endl;
#define debug(a, x) cerr<<#a<<"["<<x<<"] = "<<a[x]<<endl;
#define lson l,mid,ls
#define rson mid+1,r,rs
#define ls (rt<<1)
#define rs ((rt<<1)+1)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int loveisblue = 486;
const int maxn = 100086;
const int maxm = 100086;
const int inf = 0x3f3f3f3f;
const ll Inf = 999999999999999999;
const int mod = 1000000007;
const double eps = 1e-6;
const double pi = acos(-1);
int Head[maxm],cnt;
struct edge{
int Next,v;
double w;
}e[maxm];
struct node{
int u;
double dis;
bool operator<(const node &a)const{
return a.dis>dis;
}
};
double dis[maxn];
bool vis[maxn];
void init(){
memset(Head,-1,sizeof(Head));
memset(dis,0,sizeof(dis));
memset(vis,0,sizeof(vis));
cnt=0;
}
void add_edge(int u,int v,double w){
e[cnt].Next=Head[u];
e[cnt].v=v;
e[cnt].w=w;
Head[u]=cnt++;
}
void Dijkstra(int s){
priority_queue<node>q;
q.push(node{s,0});
dis[s]=1;
while(!q.empty()){
node exa=q.top();q.pop();
int u=exa.u;
if(vis[u]){continue;}
vis[u]=true;
for(int k=Head[u];k!=-1;k=e[k].Next){
if(!vis[e[k].v]&&dis[e[k].v]<dis[u]*e[k].w){
dis[e[k].v]=dis[u]*e[k].w;
q.push(node{e[k].v,dis[e[k].v]});
}
}
}
}
int main() {
ios::sync_with_stdio(true);
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif
int T;
scanf("%d",&T);
int cas = 0;
while(T--){
init();
ll n,m,s,k;
scanf("%lld%lld%lld%lld",&n,&m,&s,&k);
for(int i=1;i<=m;i++){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add_edge(x,y,1.0*z/100);
add_edge(y,x,1.0*z/100);
}
Dijkstra(0);
double p = dis[n-1];
double ans = 2.0*s*k/p;
printf("Case %d: %f\n",++cas,ans);
}
return 0;
}
Sending Packets LightOJ - 1321 (期望计算)的更多相关文章
- LightOJ - 1321 Sending Packets —— 概率期望
题目链接:https://vjudge.net/problem/LightOJ-1321 1321 - Sending Packets PDF (English) Statistics Foru ...
- LightOJ 1321 - Sending Packets 简单最短路+期望
http://www.lightoj.com/volume_showproblem.php?problem=1321 题意:每条边都有概率无法经过,但可以重新尝试,现给出成功率,传输次数和传输时间,求 ...
- LightOJ 1030 Discovering Gold 数学期望计算
题目大意:给出长度为n的一条隧道,每个位置都有一定数量的财宝.给你一枚骰子,roll到几点就前进几步,如果即将到达的地方超过了这条隧道长度,就重新roll一次,走到n点结束.求这个过程能收获多少财宝. ...
- lightOJ 1030(期望)
题意:有一个迷宫是1×n的格子,一个人每到一个格子就能够把这个格子内的金子所有拿走,刚開始站在第1个格子,然后開始掷骰子得到点数x,他就要从当前位置走到加x的位置.假设发现位置是大于n的就又一次掷骰子 ...
- LightOj_1321 Sending Packets
题目链接 题意: 给一个数据大小为S的数据包, 每一次发送需要K秒(单向),现在要从节点0 发送到节点 n-1. 其中有n - 1条路径, 每条路径都有一个传输成功率. 问传输成功所需最小时间的期望. ...
- LightOJ - 1030 期望+dp
题目链接:https://vjudge.net/problem/25907/origin 一个山洞,里面有有1到n个位置,每个位置都有一定的金币,你有一个六面的骰子,一开始你在1,每次摇到了哪个数就往 ...
- LightOJ - 1248 期望
题意:有一个n面筛子,每次扔一下,每面概率相同,要求扔出n面的期望次数 题解:和第三篇论文里的例题一样,算从第i个到第i+1个的概率是(n-i)/n,n面中找n-i个没有扔到过的,期望是n/(n-i) ...
- CodeForces 621C 数学概率期望计算
昨天训练赛的题..比划了好久才想出来什么意思 之前想的是暴力for循环求出来然后储存数组 后来又想了想 自己萌的可以.. 思路就是求出来每个人与他的右边的人在一起能拿钱的概率(V(或)的关系)然后*2 ...
- KUANGBIN带你飞
KUANGBIN带你飞 全专题整理 https://www.cnblogs.com/slzk/articles/7402292.html 专题一 简单搜索 POJ 1321 棋盘问题 //201 ...
随机推荐
- Leetcode796.Rotate String旋转字符串
给定两个字符串, A 和 B. A 的旋转操作就是将 A 最左边的字符移动到最右边. 例如, 若 A = 'abcde',在移动一次之后结果就是'bcdea' .如果在若干次旋转操作之后,A 能变成B ...
- js不停地触发按钮的事件
例子:不断地发匿名邮件 http://tool.chacuo.net/mailsend 在控制台写:setInterval('$(".convert :input[arg]").t ...
- 【JZOJ4882】【NOIP2016提高A组集训第12场11.10】多段线性函数
题目描述 数据范围 解法 三分找出极值,两个二分找出极值的范围. 代码 #include<iostream> #include<stdio.h> #include<str ...
- Person Re-identification 系列论文笔记(三):Improving Person Re-identification by Attribute and Identity Learning
Improving Person Re-identification by Attribute and Identity Learning Lin Y, Zheng L, Zheng Z, et al ...
- js错误处理Try-catch和throw
1.try-catch语句 Try{ //可能会导致错误的代码 }catch(error){ //在错误发生时怎么处理 } 例如: try{ window.someNonexistentFunct ...
- 18.libgdx制作预览图,背景移动循环,改变地图颜色
经过构思,游戏将分为两部分, 1,预览图,只负责展示世界形势 2,根据预览图生成的战役项 现在要记录的是我制作预览图的部分 1.预览图只有实际地图的1/4,首先生成地图(建议不要缩放以前地图,由于误差 ...
- 【转载】GAWK AWK工具使用手册
IBM GAWK入门资料http://www.ibm.com/developerworks/cn/education/aix/au-gawk/ AWK 是什么? 最简单地说,AWK 是一种用于处理文本 ...
- oracle函数 MIN([distinct|all]x)
[功能]统计数据表选中行x列的最大值. [参数]all表示对所有的值求最大值,distinct只对不同的值求最大值,默认为all 如果有参数distinct或all,需有空格与x(列)隔开. [参数] ...
- Java练习 SDUT-3422_小金问呀问不会问题
小金问呀问不会问题 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 众所周知,C语言的学习是我们程序设计基础的重点和主要 ...
- composer基本使用
一.Composer的安装 1.下载Composer 2.Composer安装 1).Composer安装前请确保已经安装了php:打开命令行窗口输入php -v可以查看php的当前版本号. 3.局部 ...