绿豆蛙的归宿【期望】【DFS】

本文介绍了一种计算有向无环图中从起点到终点路径总长度期望的方法,通过递归深度优先搜索结合概率计算实现。

题目大意:

若一个点有 k k 条出边,则走每条出边的概率均为 1k 1 k 。给出一个有向无环图,求从起点走到终点的所经过的路径总长度期望。
Input I n p u t

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

Output O u t p u t

7.00

思路:

这很明显是一道数学期望的题目。但是由于之前没有做过这类的题目,所以做起来还是很吃力。
拿样例来说
这里写图片描述


1 1 一开始肯定是有1.00的几率到达的,它有两条出边,分别到达点 2 2 和点 3 3 ,那么,点 2 2 和点 3 3 就各有0.50的几率到达。
这里写图片描述
那么,点 2 2 又有一条出边到达点 3 3 ,那么点 3 3 到达的几率就在原来的基础上又加上了点 2 2 的到达几率,所以点 3 3 的到达几率为1.00。
这里写图片描述
然后点 3 3 就只有一条出边,通向点 4 4 ,所以点 4 4 到达几率就为 1.00 1.00
这里写图片描述

每次当我们访问到一个点时,就讲答案 sum s u m 加上它到达的概率 × × 边权,即

sum+=s[x]num[x]×e[i].dis s u m + = s [ x ] n u m [ x ] × e [ i ] . d i s

且这个点的期望也要加上 s[x]num[x] s [ x ] n u m [ x ]
然后继续向下搜索,搜到点 n n 时就返回,然后 将期望值减去 s[x]num[x] s [ x ] n u m [ x ] ,防止重复计算。


代码:

#include <cstdio>
#include <iostream>
using namespace std;

int n,m,x,y,t;
double z,sum,s[300011],num[300011],head[300011],k;

struct edge  //邻接表
{
    int to,next;
    double dis;
}e[500011];

void add(int from,int to,double d)  //建边
{
    t++;
    e[t].dis=d;
    e[t].to=to;
    e[t].next=head[from];
    head[from]=t;
}

void dfs(int x)
{
    if (x==n) return;  //到达终点
    for (int i=head[x];i;i=e[i].next)
    {
        int v=e[i].to;
        double l=s[x]/num[x];  //计算路径长度期望
        s[v]+=l;  //加上期望
        sum+=e[i].dis*l;  //答案
        dfs(v);
        s[v]-=l;  //减掉期望
    }
}

int main()
{
    scanf("%d%d",&n,&m);
    for (int i=1;i<=m;i++)
    {
        scanf("%d%d%lf",&x,&y,&z);
        add(x,y,z);  //建边
        num[x]++;
    }
    s[1]=1.00;  
    dfs(1);
    printf("%0.2lf\n",sum);
    return 0;
}
内容概要:本文详细介绍了“秒杀商城”微服务架构的设计与实战全过程,涵盖系统从需求分析、服务拆分、技术选型到核心功能开发、分布式事务处理、容器化部署及监控链路追踪的完整流程。重点解决了高并发场景下的超卖问题,采用Redis预减库存、消息队列削峰、数据库乐观锁等手段保障数据一致性,并通过Nacos实现服务注册发现与配置管理,利用Seata处理跨服务分布式事务,结合RabbitMQ实现异步下单,提升系统吞吐能力。同时,项目支持Docker Compose快速部署和Kubernetes生产级编排,集成Sleuth+Zipkin链路追踪与Prometheus+Grafana监控体系,构建可观测性强的微服务系统。; 适合人群:具备Java基础和Spring Boot开发经验,熟悉微服务基本概念的中高级研发人员,尤其是希望深入理解高并发系统设计、分布式事务、服务治理等核心技术的开发者;适合工作2-5年、有志于转型微服务或提升架构能力的工程师; 使用场景及目标:①学习如何基于Spring Cloud Alibaba构建完整的微服务项目;②掌握秒杀场景下高并发、超卖控制、异步化、削峰填谷等关键技术方案;③实践分布式事务(Seata)、服务熔断降级、链路追踪、统一配置中心等企业级中间件的应用;④完成从本地开发到容器化部署的全流程落地; 阅读建议:建议按照文档提供的七个阶段循序渐进地动手实践,重点关注秒杀流程设计、服务间通信机制、分布式事务实现和系统性能优化部分,结合代码调试与监控工具深入理解各组件协作原理,真正掌握高并发微服务系统的构建能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值