【BZOJ - 3036】绿豆蛙的归宿(概率DAG图dp,拓扑排序,概率dp,期望的线性性)

题干:

随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿。

给出一个有向无环的连通图,起点为1终点为N,每条边都有一个长度。绿豆蛙从起点出发,走向终点。
到达每一个顶点时,如果有K条离开该点的道路,绿豆蛙可以选择任意一条道路离开该点,并且走向每条路的概率为 1/K 。
现在绿豆蛙想知道,从起点走到终点的所经过的路径总长度期望是多少?

Input

第一行: 两个整数 N M,代表图中有N个点、M条边
第二行到第 1+M 行: 每行3个整数 a b c,代表从a到b有一条长度为c的有向边

Output
从起点到终点路径总长度的期望值,四舍五入保留两位小数。

Sample Input

4 4
1 2 1
1 3 2
2 3 3
3 4 4

Sample Output

7.00

Hint

对于100%的数据  N<=100000,M<=2*N

解题报告:

根据期望的线性性,可以转化成每条边被走过的次数的和。也就是:每条边的概率乘以该边的边权,求和就是答案。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define F first
#define S second
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
typedef pair<int,int> PII;
const int MAX = 2e5 + 5;
int head[MAX],n,m,tot,in[MAX],out[MAX];
double p[MAX],ans;
struct Edge {int u,v,w;int ne;
} e[MAX];
void add(int u,int v,int w) {e[++tot].u = u;e[tot].v = v;e[tot].w = w;e[tot].ne = head[u];head[u] = tot;
}
int main()
{tot=0;memset(head,-1,sizeof head);cin>>n>>m;for(int a,b,c,i = 1; i<=m; i++) scanf("%d%d%d",&a,&b,&c),add(a,b,c),out[a]++,in[b]++; queue<int> q;q.push(1);p[1]=1;while(q.size()) {int cur = q.front();q.pop();for(int i = head[cur]; ~i; i = e[i].ne) {int v = e[i].v,u = e[i].u;in[v]--;if(!in[v]) q.push(v);p[v] += p[u]/out[u];ans += (p[u]/out[u]) * e[i].w;}}printf("%.2f\n",ans);return 0 ;
}

总结:

当然这题也可以像【POJ - 2096】Collecting Bugs(概率dp)这题一样用dp[i]代表从i这个点开始走到n号节点的平均边数,然后dp[n]=0,dp[1]就是答案。

但是这题没必要,因为那道题是:转化成DAG图之后,你知道每条边转化的概率,所以可以直接dp,但是这题你刚开始并不知道每条边被走过的概率是多少,比如这个图就不知道这一点没所以没法用这个信息。

所以这题如果非要用这种方法解题,那首先先预处理出来每条边的概率

,然后就可以用那种dp的方式求解了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/440059.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python菜鸟100例精选

# 有四个数字&#xff1a;1、2、3、4&#xff0c;能组成多少个互不相同且无重复数字的三位数&#xff1f;各是多少&#xff1f; def four_number():n 0for i in range(1,5):for j in range(1,5):for k in range(1,5):if (i ! j) and (i!k) and (j!k):n 1# print(i,j,k)print(…

机器学习笔记:Overview

1&#xff09;机器学习笔记&#xff08;1&#xff09;&#xff1a;Introduction 2&#xff09;机器学习笔记&#xff08;2&#xff09;&#xff1a;单变量线性回归 3&#xff09;机器学习笔记&#xff08;3&#xff09;&#xff1a;线性代数回顾 4&#xff09;机器学习笔记&…

【LightOJ - 1030】Discovering Gold(概率dp,数学期望,期望的线性性)

题干&#xff1a; You are in a cave, a long cave! The cave can be represented by a 1 x N grid. Each cell of the cave can contain any amount of gold. Initially you are in position 1. Now each turn you throw a perfect 6 sided dice. If you get X in the dice …

【LightOJ - 1079】Just another Robbery(概率dp,概率背包)

题干&#xff1a; As Harry Potter series is over, Harry has no job. Since he wants to make quick money, (he wants everything quick!) so he decided to rob banks. He wants to make a calculated risk, and grab as much money as possible. But his friends - Hermi…

强烈推荐的TensorFlow、Pytorch和Keras的样例资源(深度学习初学者必须收藏)

目录 一、TensorFlow 二、Keras 三、Pytorch 总结 本文转自微信公众号&#xff1a;机器学习初学者 原创&#xff1a; 机器学习初学者 机器学习初学者 TensorFlow、Keras和Pytorch是目前深度学习的主要框架&#xff0c;也是入门深度学习必须掌握的三大框架&#xff0c;但…

由浅到深理解ROS(1)

ROS机器人操作系统 &#xff08; Robot Operating System 或简称 ROS&#xff09;&#xff0c;可以帮助提高机器人软件的开发效率。ROS能够提供类似传统操作系统的诸多功能&#xff0c;如硬件抽象、底层设备控制、常用功能实现、进程间消息传递和程序包管理等。此外&#xff0c…

Centos7换yum源

1.进入到yum的源目录下 cd /etc/yum.repos.d/2.将原来的CentOS-Base.repo进行备份 mv CentOS-Base.repo CentOS-Base.repo_back3.下载阿里源 http://mirrors.aliyun.com/repo/Centos-7.repo 到/etc/yum.repos.d/目录下 4.改变名字 mv Centos-7.repo CentOS-Base.repo5.生成…

(3)链表

目录 下面是关于链表的一些知识点&#xff1a; 链表的操作&#xff1a; 创建链表 遍历链表 判断链表是否为空 求链表长度 插入元素 删除元素 排序链表 这篇笔记是根据郝斌老师的上课讲义整理而得&#xff1a; 前面介绍了连续的存储结构&#xff1a;数组&#xff0c;今…

【LightOJ - 1027】A Dangerous Maze(概率dp,数学期望)

题干&#xff1a; You are in a maze; seeing n doors in front of you in beginning. You can choose any door you like. The probability for choosing a door is equal for all doors. If you choose the ith door, it can either take you back to the same position wh…

由浅到深理解ROS(2)

ROS文件系统 用户可以直接参看官网&#xff1a; http://wiki.ros.org/ROS/Tutorials/NavigatingTheFilesystem ROS文件系统中的两个最基本的概念&#xff1a;Package和Manifest&#xff0c;即包和清单文件。 &#xff08;1&#xff09;Package是组织ROS代码的最基本单位&…

Django员工管理系统

Django员工管理系统&#xff08;ems&#xff09; 需求分析&#xff1a; 1.实现管理员的注册、登陆页面注册&#xff1a;用户名、真实名字、密码、确认密码、性别、验证码用户名需要判断是否合法、是否存在&#xff0c;loading图片提示密码和确认密码是否相同&#xff0c;load…

(4)栈

目录 栈的知识点&#xff1a; 栈的操作&#xff1a; 创建栈&#xff1a; 压栈&#xff1a; 遍历栈&#xff1a; 判断栈是否为空&#xff1a; 出栈 清空栈 这篇笔记是根据郝斌老师的上课讲义整理而得。 栈的知识点&#xff1a; 栈的定义&#xff1a;一种可以实现"…

【LightOJ - 1104】Birthday Paradox(概率,思维)

题干&#xff1a; Sometimes some mathematical results are hard to believe. One of the common problems is the birthday paradox. Suppose you are in a party where there are 23 people including you. What is the probability that at least two people in the party…

爬虫小记

中国商标网 找到正确的入口 在此页面加入全部data数据获取xhr请求包

由浅到深理解ROS(3)-命名空间

全局命名空间&#xff1a; /rosout前面的反斜杠“/”表明该节点名称属于全局命名空间。之所以叫做全局名称因为它们在任何地方&#xff08;包括代码、命令行工具、图形界面工具等的任何地方&#xff09;都可以使用。无论这些名称用作众多命令行工具的参数还是用在节点内部&…

(5)队列

目录 队列知识点&#xff1a; 循环队列&#xff1a; 队列的操作&#xff1a; 创建队列&#xff1a; 判断队列是否已满&#xff1a; 入队&#xff1a; 遍历队列&#xff1a; 判断队列是否为空&#xff1a; 出队&#xff1a; 这篇笔记是根据郝斌老师的上课讲义整理而得&…

【LightOJ - 1038】Race to 1 Again(概率dp,数学期望)

题干&#xff1a; Rimi learned a new thing about integers, which is - any positive integer greater than 1 can be divided by its divisors. So, he is now playing with this property. He selects a number N. And he calls this D. In each turn he randomly choose…

使用matplotlib进行简单的数据展示

import numpy as np import matplotlib.pyplot as plt# 解决中文乱码 plt.rcParams[font.sans-serif] [SimHei] # 用来正常显示中文标签 plt.rcParams[axes.unicode_minus] False # 用来正常显示负号# 建立一个坐标系 plt.subplot(1, 1, 1) # 指明x和y值 x np.array([1, 2…

(6)递归

目录 递归知识点&#xff1a; 递归操作&#xff1a; 阶乘的循环实现&#xff1a; 阶乘的递归实现&#xff1a; 经典的汉诺塔问题&#xff1a; 这篇笔记是根据郝斌老师的上课讲义整理而得。 递归知识点&#xff1a; 定义&#xff1a;一个函数自己直接或间接调用自己 。 …

由浅到深理解ROS(4)

消息和消息类型 节点能相互传递消息&#xff0c;节点之间通信也是基于消息。消息类型也就是数据类型数据类型&#xff0c;理解消息的类型很重要&#xff0c;因为它决定了消息的内容。也就是说&#xff0c;一个话题的消息类型能告诉你该话题中每个消息携带了哪些信息&#xff0…