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 ...
随机推荐
- oracle-ORA-00942错误
表或视图不存在 原因:1.表或视图真的不存在 2.用户没有访问该表的权限. ORA-01078: 处理系统参数失败 ORA-01438: value larger than specified pre ...
- Python内存机制简介
1: 变量不是盒子,应该把变量视作便利贴.变量只不过是标注,所以无法阻止为对象贴上多个标注.标注就是别名: >>> a = [1, 2, 3] >>> b = a ...
- dsadsa
1.Swift预览 一般来说,编程语言教程中的第一个程序是在屏幕上打印“Hello, world”.在 Swift 中,可以用一行代码实现: println("Hello, world&qu ...
- 自定义View系列教程07--详解ViewGroup分发Touch事件
深入探讨Android异步精髓Handler 站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架(1)- 核心基础 Android多分辨率适配框架(2)- 原理剖析 Andr ...
- ExecutorService小试牛刀
现在的项目中有将学生批量加入课程的需求,于是想根据这个需求测试一下ExecutorService的效率.假设一个场景:现在有100门课,1500名学生,要求每15个人加入一门课程,不重复. 查询并拼接 ...
- kubernetes API 访问控制在阿里云容器服务(ACK)上的实践
提起K8s API的访问控制,很多同学应该都会想到RBAC,这是K8s用来做权限控制的方法,但是K8s对API的访问控制却不止于此,今天我们就来简单介绍下K8s的访问控制以及ACK如何利用这套方法提供 ...
- H3C 命令行帮助特性
- linux下oracle查询中文乱码
export NLS_LANG=AMERICAN_AMERICA.UTF8
- 【Vue】基于nodejs的vue项目打包编译部署
一·项目编译 1·进入项目目录下的终端执行命令 npm run build 正常情况如下图,如遇到错误不会编译成功,且编译后的html文件不能正常渲染. 2·编译完成后进入项目下的dist目录运行生成 ...
- Educational Codeforces Round 10 A B题、
A. Gabriel and Caterpillar 题意: 就是说 一个小孩子去观察毛毛虫从 h1的地方爬到h2的地方.毛毛虫从10点爬到22点.每小时爬的距离是a, 晚上22点到第二天早上10点 ...