这个题开始正向拓扑排序,然后各种wa,心灰意冷,找了个题解,和同学研究了半天,甚至曾经一度认为题解是错的。

这个题正向反向应该都无所谓,但是我实在是蒻,打了半天正向都没打过去,最后跟随dalao的步伐走向了反向拓扑

#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<stack>
using namespace std;
int n,m,x,y,z,head[100010],tail,ru[100010],chu[100010];
bool flag[100010];
double ans[100010];
queue<int>qwq;
struct in
{int to,ne,co;
}ter[200020];
inline void build(int f,int l,int c)
{ter[++tail]=(in){l,head[f],c},head[f]=tail;
}
int main()
{memset(head,-1,sizeof(head));scanf("%d%d",&n,&m);for(int i=1;i<=m;i++)scanf("%d%d%d",&x,&y,&z),build(y,x,z),ru[x]++,chu[x]++;//反向建图,因为从1跑不到的点肯定反向建图也跑不到1 for(int i=1;i<=n;i++)if(!ru[i])//如果原图该点,没有出边(终点)
            qwq.push(i);while(!qwq.empty()){int qaq=qwq.front();qwq.pop();//这里可以换成栈,跑的还更快,虽然我不知道为啥 for(int i=head[qaq];i>0;i=ter[i].ne){int t=ter[i].to;double gai=1.0/chu[t];ans[t]+=(ans[qaq]+ter[i].co)*gai;//求期望的必要步骤嘛qwq ru[t]--;if(!ru[t])qwq.push(t);} }for(int i=1;i<=n;i++)printf("%.2lf ",ans[i]);//printf("%.2lf",ans[1]);
}
/*关于这个反向拓扑排序可以的原因
因为每一个点都可以到达终点,所以无论正向反向,所有的从1到n的路径的期望值都不会变
所以正向反向无所谓
为什么要用拓扑排序
因为只有一个点所有到他的边都被走过,关于到它的期望值才算真正确定
*/ #include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<stack>
using namespace std;
int n,m,x,y,z,head[100010],tail,ru[100010],chu[100010];
bool flag[100010];
double ans[100010];
queue<int>qwq;
struct in
{int to,ne,co;
}ter[200020];
inline void build(int f,int l,int c)
{ter[++tail]=(in){l,head[f],c},head[f]=tail;
}
int main()
{memset(head,-1,sizeof(head));scanf("%d%d",&n,&m);for(int i=1;i<=m;i++)scanf("%d%d%d",&x,&y,&z),build(y,x,z),ru[x]++,chu[x]++;//反向建图,因为从1跑不到的点肯定反向建图也跑不到1 for(int i=1;i<=n;i++)if(!ru[i])//如果原图该点,没有出边(终点)
            qwq.push(i);while(!qwq.empty()){int qaq=qwq.front();qwq.pop();//这里可以换成栈,跑的还更快,虽然我不知道为啥 for(int i=head[qaq];i>0;i=ter[i].ne){int t=ter[i].to;double gai=1.0/chu[t];ans[t]+=(ans[qaq]+ter[i].co)*gai;//求期望的必要步骤嘛qwq ru[t]--;if(!ru[t])qwq.push(t);} }for(int i=1;i<=n;i++)printf("%.2lf ",ans[i]);//printf("%.2lf",ans[1]);
}
/*关于这个反向拓扑排序可以的原因
因为每一个点都可以到达终点,所以无论正向反向,所有的从1到n的路径的期望值都不会变
所以正向反向无所谓
为什么要用拓扑排序
因为只有一个点所有到他的边都被走过,关于到它的期望值才算真正确定
*/ #include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<stack>
using namespace std;
int n,m,x,y,z,head[100010],tail,ru[100010],chu[100010];
bool flag[100010];
double ans[100010];
queue<int>qwq;
struct in
{int to,ne,co;
}ter[200020];
inline void build(int f,int l,int c)
{ter[++tail]=(in){l,head[f],c},head[f]=tail;
}
int main()
{memset(head,-1,sizeof(head));scanf("%d%d",&n,&m);for(int i=1;i<=m;i++)scanf("%d%d%d",&x,&y,&z),build(y,x,z),ru[x]++,chu[x]++;//反向建图,因为从1跑不到的点肯定反向建图也跑不到1 for(int i=1;i<=n;i++)if(!ru[i])//如果原图该点,没有出边(终点)
            qwq.push(i);while(!qwq.empty()){int qaq=qwq.front();qwq.pop();//这里可以换成栈,跑的还更快,虽然我不知道为啥 for(int i=head[qaq];i>0;i=ter[i].ne){int t=ter[i].to;double gai=1.0/chu[t];ans[t]+=(ans[qaq]+ter[i].co)*gai;//求期望的必要步骤嘛qwq ru[t]--;if(!ru[t])qwq.push(t);} }for(int i=1;i<=n;i++)printf("%.2lf ",ans[i]);//printf("%.2lf",ans[1]);
}
/*关于这个反向拓扑排序可以的原因
因为每一个点都可以到达终点,所以无论正向反向,所有的从1到n的路径的期望值都不会变
所以正向反向无所谓
为什么要用拓扑排序
因为只有一个点所有到他的边都被走过,关于到它的期望值才算真正确定
*/ 

转载于:https://www.cnblogs.com/Loi-dfkdsmbd/articles/7706082.html

【codevs2488】绿豆蛙的归宿相关推荐

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

    3036: 绿豆蛙的归宿 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 491  Solved: 354 Description 随着新版百度空间的下 ...

  2. Acwing 217. 绿豆蛙的归宿

    Acwing 217. 绿豆蛙的归宿 题意: 给出一个有向无环的连通图,起点为 1,终点为 N,每条边都有一个长度. 数据保证从起点出发能够到达图中所有的点,图中所有的点也都能够到达终点. 绿豆蛙从起 ...

  3. 【BZOJ3036】绿豆蛙的归宿 拓补排序+概率

    [BZOJ3036]绿豆蛙的归宿 Description 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 给出一个有向无环的连通图,起点为1终点为N,每条边都有一个长度. ...

  4. [cogs1065]绿豆蛙的归宿

    1065. [Nescafe19] 绿豆蛙的归宿 [题目描述] 给出一个有向无环的连通图,起点为1终点为N,每条边都有一个长度.绿豆蛙从起点出发,走向终点. 到达每一个顶点时,如果有K条离开该点的道路 ...

  5. bzoj 3036: 绿豆蛙的归宿(Dp)

    3036: 绿豆蛙的归宿 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 724  Solved: 511 [Submit][Status][Discu ...

  6. 【题解】绿豆蛙的归宿

    绿豆蛙的归宿 [题目描述] 给出一个有向无环的连通图,起点为 111 终点为 NNN ,每条边都有一个长度.绿豆蛙从起点出发,走向终点.数据保证从起点出发能够达到图中所有点,图中所有点都能够到底终点. ...

  7. 概率与期望——P4316 绿豆蛙的归宿

    概率与期望--P4316 绿豆蛙的归宿 题目 算法分析 Code 反思与总结 题目 P4316 绿豆蛙的归宿 算法分析 要计算路径的总长度期望,可以将每一个结点看作一个阶段,用dpdpdp来实现.(看 ...

  8. 51nod3146 绿豆蛙的归宿

    3146 绿豆蛙的归宿 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 给出一个有向无环的连通图,起点为11终点为nn,每条边都有一个长度.绿豆蛙从起点出发,走向终点. ...

  9. JZOJ 3388. 【NOIP2013模拟】绿豆蛙的归宿

    3388. [NOIP2013模拟]绿豆蛙的归宿 (Standard IO) Time Limits: 1000 ms  Memory Limits: 131072 KB  Detailed Limi ...

  10. bzoj3036 绿豆蛙的归宿

    绿豆蛙的归宿 Time Limit: 2 Sec Memory Limit: 128 MB Description 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 给出一 ...

最新文章

  1. ksql 数量大于2_504深入解读路基土石方说明,路基填方数量组成?运距>15km咋办...
  2. linux c dup dup2 重定向函数简介
  3. leetcode 102.二叉树的层序遍历
  4. 判断js中的数据类型的方法
  5. matlab 中max函数用法
  6. python中dir用法_Python dir()函数
  7. DataGrid中間隔色的實現
  8. 数值优化之高斯-牛顿法(Gauss-Newton)
  9. 2、matplotlib中的 ax=fig.add_axes([0,0,1,1])详解
  10. 如何在Mac设置开机自启程序项,教程在这!
  11. 怎样修改电脑时间同步北京时间
  12. Python字符串地常规操作:取值,切片,查找,替换,分割,拼接,转义
  13. moment的使用——简单易懂
  14. 常用的Web前端技术有哪些?如何入门?
  15. http://strong0511.blog.163.com/blog/static/15115379520124510362211/
  16. 图片在线预览html,Viewer.js – 强大的JS/jQuery图片查看器
  17. 如何使用peakview软件查看AB SCIEX 质谱下机数据
  18. 【luogu P3674】 小清新人渣的本愿
  19. ArcMap 数据的标注和注记
  20. xp无任何网络提供程序接受指定的网络路径解决方法--win7w.com

热门文章

  1. python中order函数_order by排序
  2. 不使用杀毒软件就上网也不会感染计算机病毒,【判断题】不使用杀毒软件就上网也不会感染计算机病毒。 A. 正确 B. 错误...
  3. 非线性回归(Non-linear Regression)
  4. k8s pod内部容器_第三章 pod:运行于kubernetes中的容器
  5. Vue移动端项目——Vant 移动端 REM 适配
  6. LeetCode 2091. 从数组中移除最大值和最小值(一次遍历)
  7. LeetCode 270. 最接近的二叉搜索树值
  8. 剑指Offer - 面试题61. 扑克牌中的顺子
  9. LeetCode 77. 组合(回溯)
  10. LeetCode 784. 字母大小写全排列(位运算回溯)