P4316 绿豆蛙的归宿 期望DP

P4316 绿豆蛙的归宿 期望DP

DAG上,每条边有边权,走向相连每条路的概率相等,问从起点到终点所经过的路径总长度期望

因为发现终点走到终点期望为0,定义\(f[i]\)从终点走到\(i\)所经过的路径总长度期望,所以\(f[n]=0\)。于是建反图,拓扑转移
\[
f[v]+=\frac{w+f[u]}{edg[v]}
\]
\(edg[v]\)表示从节点\(v\)有\(edg[v]\)条路可走

#include <cstdio>
#include <queue>
#define MAXN 100010
using namespace std;
int head[MAXN],nxt[MAXN*2],vv[MAXN*2],ww[MAXN*2],tot;
inline void add_edge(const int &u, const int &v, const int &w){
    vv[++tot]=v;
    ww[tot]=w;
    nxt[tot]=head[u];
    head[u]=tot;
}
int read(){
    char ch;int s=0;
    ch = getchar();
    while(ch<'0'||ch>'9') ch=getchar();
    while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
    return s;
}
int rdu[MAXN],edg[MAXN],n,m;
double f[MAXN];
queue <int> q;
int main(){
    n=read(),m=read();
    for(int i=1;i<=m;++i){
        int u,v,w;
        u=read(),v=read(),w=read();
        add_edge(v, u, w);
        ++edg[u];++rdu[u];
    }
    q.push(n);
    while(!q.empty()){
        int u=q.front();q.pop();
        for(int i=head[u];i;i=nxt[i]){
            int v=vv[i],w=ww[i];
            f[v]+=(w+f[u])/edg[v];
            --rdu[v];
            if(rdu[v]==0) q.push(v);
        }
    }
    printf("%.2f\n", f[1]);
    return 0;
}

原文地址:https://www.cnblogs.com/santiego/p/11437952.html

时间: 2024-10-10 15:22:09

P4316 绿豆蛙的归宿 期望DP的相关文章

Luogu_P4316 绿豆蛙的归宿 期望DP

Luogu_P4316 绿豆蛙的归宿 ### 期望DP 题面 挺简单的概率期望DP 设\(f[i]\)为\(i\)到\(n\)的期望路径的长度 答案就是\(f[1]\) \(f[x]=(\dfrac{1}{d[x]})*∑(f[y]+dis)\) \(d\)是度数,\(y\)是\(x\)的儿子,\(dis\)就是距离 这个式子比较显然 但是这个是从后往前推的 需要反着建图然后再通过拓扑排序DP 代码如下: #include<bits/stdc++.h> using namespace std;

bzoj 3036 绿豆蛙的归宿 期望dp

题面 题目传送门 解法 $\(f_x=\sum \frac{f_y+w(x,y)}{out_x}\) 因为是一个DAG,直接记忆化即可 时间复杂度:\(O(n+m)\) 代码 #include <bits/stdc++.h> #define N 100010 using namespace std; template <typename node> void chkmax(node &x, node y) {x = max(x, y);} template <type

Luogu P4316 绿豆蛙的归宿

P4316 绿豆蛙的归宿 题意翻译 「Poetize3」 题目背景 随着新版百度空间的上线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 题目描述 给出一个有向无环图,起点为1终点为N,每条边都有一个长度,并且从起点出发能够到达所有的点,所有的点也都能够到达终点.绿豆蛙从起点出发,走向终点. 到达每一个顶点时,如果有K条离开该点的道路,绿豆蛙可以选择任意一条道路离开该点,并且走向每条路的概率为 1/K . 现在绿豆蛙想知道,从起点走到终点的所经过的路径总长度期望是多少? 输入输出格式 输

P4316 绿豆蛙的归宿

P4316 绿豆蛙的归宿 因为非要用bfs所以稍微麻烦一点qwq(大家用的都是dfs) 其实问题让我们求的就是经过每条边的概率*边权之和 我们可以用bfs把图遍历一遍处理概率,顺便把每条边的概率*边权存到这条边的终点上 最后把每个点的答案累加起来,答案就出来了 #include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<cctype> using n

bzoj3036--绿豆蛙的归宿--期望dp

Description 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 给出一个有向无环的连通图,起点为1终点为N,每条边都有一个长度.绿豆蛙从起点出发,走向终点.到达每一个顶点时,如果有K条离开该点的道路,绿豆蛙可以选择任意一条道路离开该点,并且走向每条路的概率为 1/K .现在绿豆蛙想知道,从起点走到终点的所经过的路径总长度期望是多少? Input 第一行: 两个整数 N M,代表图中有N个点.M条边第二行到第 1+M 行: 每行3个整数 a b c,代表从a到

【BZOJ 3036】 3036: 绿豆蛙的归宿 (概率DP)

3036: 绿豆蛙的归宿 Time Limit: 2 Sec  Memory Limit: 128 MBSubmit: 491  Solved: 354 Description 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 给出一个有向无环的连通图,起点为1终点为N,每条边都有一个长度.绿豆蛙从起点出发,走向终点.到达每一个顶点时,如果有K条离开该点的道路,绿豆蛙可以选择任意一条道路离开该点,并且走向每条路的概率为 1/K .现在绿豆蛙想知道,从起点走到终点的所经

AC日记——绿豆蛙的归宿 codevs 2488

绿豆蛙的归宿 思路: topsort+期望dp: 代码: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define maxn 100005 int head[maxn],cnt,E[maxn<<2],V[maxn<<2],du[maxn]; int sta[maxn],top,n,

TYVJ P1933 绿豆蛙的归宿 题解(未完成)

P1933 「Poetize3」绿豆蛙的归宿 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 随着新版百度空间的上线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 描述 给出一个有向无环图,起点为1终点为N,每条边都有一个长度,并且从起点出发能够到达所有的点,所有的点也都能够到达终点.绿豆蛙从起点出发,走向终点.到达每一个顶点时,如果有K条离开该点的道路,绿豆蛙可以选择任意一条道路离开该点,并且走向每条路的概率为 1/K .现在绿豆蛙想知道,从起

BZOJ3036: 绿豆蛙的归宿&amp;Wikioi2488:绿豆蛙的归宿

3036: 绿豆蛙的归宿 Time Limit: 2 Sec  Memory Limit: 128 MBSubmit: 108  Solved: 73[Submit][Status] Description 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 给出一个有向无环的连通图,起点为1终点为N,每条边都有一个长度.绿豆蛙从起点出发,走向终点.到达每一个顶点时,如果有K条离开该点的道路,绿豆蛙可以选择任意一条道路离开该点,并且走向每条路的概率为 1/K .现在绿豆