【codevs2488】绿豆蛙的归宿
这个题开始正向拓扑排序,然后各种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】绿豆蛙的归宿相关推荐
- 【BZOJ 3036】 3036: 绿豆蛙的归宿 (概率DP)
3036: 绿豆蛙的归宿 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 491 Solved: 354 Description 随着新版百度空间的下 ...
- Acwing 217. 绿豆蛙的归宿
Acwing 217. 绿豆蛙的归宿 题意: 给出一个有向无环的连通图,起点为 1,终点为 N,每条边都有一个长度. 数据保证从起点出发能够到达图中所有的点,图中所有的点也都能够到达终点. 绿豆蛙从起 ...
- 【BZOJ3036】绿豆蛙的归宿 拓补排序+概率
[BZOJ3036]绿豆蛙的归宿 Description 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 给出一个有向无环的连通图,起点为1终点为N,每条边都有一个长度. ...
- [cogs1065]绿豆蛙的归宿
1065. [Nescafe19] 绿豆蛙的归宿 [题目描述] 给出一个有向无环的连通图,起点为1终点为N,每条边都有一个长度.绿豆蛙从起点出发,走向终点. 到达每一个顶点时,如果有K条离开该点的道路 ...
- bzoj 3036: 绿豆蛙的归宿(Dp)
3036: 绿豆蛙的归宿 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 724 Solved: 511 [Submit][Status][Discu ...
- 【题解】绿豆蛙的归宿
绿豆蛙的归宿 [题目描述] 给出一个有向无环的连通图,起点为 111 终点为 NNN ,每条边都有一个长度.绿豆蛙从起点出发,走向终点.数据保证从起点出发能够达到图中所有点,图中所有点都能够到底终点. ...
- 概率与期望——P4316 绿豆蛙的归宿
概率与期望--P4316 绿豆蛙的归宿 题目 算法分析 Code 反思与总结 题目 P4316 绿豆蛙的归宿 算法分析 要计算路径的总长度期望,可以将每一个结点看作一个阶段,用dpdpdp来实现.(看 ...
- 51nod3146 绿豆蛙的归宿
3146 绿豆蛙的归宿 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 给出一个有向无环的连通图,起点为11终点为nn,每条边都有一个长度.绿豆蛙从起点出发,走向终点. ...
- JZOJ 3388. 【NOIP2013模拟】绿豆蛙的归宿
3388. [NOIP2013模拟]绿豆蛙的归宿 (Standard IO) Time Limits: 1000 ms Memory Limits: 131072 KB Detailed Limi ...
- bzoj3036 绿豆蛙的归宿
绿豆蛙的归宿 Time Limit: 2 Sec Memory Limit: 128 MB Description 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 给出一 ...
最新文章
- ksql 数量大于2_504深入解读路基土石方说明,路基填方数量组成?运距>15km咋办...
- linux c dup dup2 重定向函数简介
- leetcode 102.二叉树的层序遍历
- 判断js中的数据类型的方法
- matlab 中max函数用法
- python中dir用法_Python dir()函数
- DataGrid中間隔色的實現
- 数值优化之高斯-牛顿法(Gauss-Newton)
- 2、matplotlib中的 ax=fig.add_axes([0,0,1,1])详解
- 如何在Mac设置开机自启程序项,教程在这!
- 怎样修改电脑时间同步北京时间
- Python字符串地常规操作:取值,切片,查找,替换,分割,拼接,转义
- moment的使用——简单易懂
- 常用的Web前端技术有哪些?如何入门?
- http://strong0511.blog.163.com/blog/static/15115379520124510362211/
- 图片在线预览html,Viewer.js – 强大的JS/jQuery图片查看器
- 如何使用peakview软件查看AB SCIEX 质谱下机数据
- 【luogu P3674】 小清新人渣的本愿
- ArcMap 数据的标注和注记
- xp无任何网络提供程序接受指定的网络路径解决方法--win7w.com
热门文章
- python中order函数_order by排序
- 不使用杀毒软件就上网也不会感染计算机病毒,【判断题】不使用杀毒软件就上网也不会感染计算机病毒。
A. 正确
B. 错误...
- 非线性回归(Non-linear Regression)
- k8s pod内部容器_第三章 pod:运行于kubernetes中的容器
- Vue移动端项目——Vant 移动端 REM 适配
- LeetCode 2091. 从数组中移除最大值和最小值(一次遍历)
- LeetCode 270. 最接近的二叉搜索树值
- 剑指Offer - 面试题61. 扑克牌中的顺子
- LeetCode 77. 组合(回溯)
- LeetCode 784. 字母大小写全排列(位运算回溯)