BZOJ 3143 [Hnoi2013]游走 ——概率DP
概率DP+高斯消元
与博物馆一题不同的是,最终的状态是有一定的概率到达的,但是由于不能从最终状态中出来,所以最后要把最终状态的概率置为0。
一条边$(x,y)$经过的概率是x点的概率$*x$到$y$的概率+$y$的概率$*y$到$x$的概率。
然后直接高斯消元即可。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i)
#define maxn 500005 double a[505][505],p[500005];
int h[maxn],fr[maxn],to[maxn],ne[maxn],en=0,n,m,du[maxn]; void add(int a,int b)
{to[en]=b;fr[en]=a;ne[en]=h[a];h[a]=en++;} void solve(int x)
{
a[x][x]=1; if (x==n) return;
for (int i=h[x];i>=0;i=ne[i])
{
if (to[i]==n) continue;
a[x][to[i]]-=1.0/du[to[i]];
}
} void gauss()
{
F(i,1,n)
{
int tmp=i;
while (!a[tmp][i]&&tmp<=n) tmp++;
if (tmp>n) continue;
F(j,i,n+1) swap(a[i][j],a[tmp][j]);
F(j,1,n) if (j!=i)
{
double t=a[j][i]/a[i][i];
F(k,1,n+1) a[j][k]-=t*a[i][k];
}
}
} int main()
{
memset(h,-1,sizeof h);
scanf("%d%d",&n,&m);
F(i,1,m)
{
int a,b;
scanf("%d%d",&a,&b);
add(a,b);add(b,a);
du[a]++;du[b]++;
}
F(i,1,n) solve(i);
a[1][n+1]=1;
gauss();
F(i,1,n) a[i][i]=a[i][n+1]/a[i][i];
int tot=0;
for (int i=0;i<en;i+=2)
p[++tot]=a[fr[i]][fr[i]]/(du[fr[i]]*1.0)+a[to[i]][to[i]]/(du[to[i]]*1.0);
sort(p+1,p+tot+1);
double ans=0;
F(i,1,tot) ans+=p[i]*(m-i+1);
printf("%.3f\n",ans);
}
BZOJ 3143 [Hnoi2013]游走 ——概率DP的更多相关文章
- BZOJ 3143: [Hnoi2013]游走 [概率DP 高斯消元]
一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编号的分 ...
- bzoj 3143 [Hnoi2013]游走 期望dp+高斯消元
[Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3394 Solved: 1493[Submit][Status][Disc ...
- BZOJ 3143: [Hnoi2013]游走 概率与期望+高斯消元
Description 一个无向连通图,顶点从1编号到N,边从1编号到M.小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获 ...
- BZOJ.3143.[HNOI2013]游走(概率 期望 高斯消元)
题目链接 参考 远航之曲 把走每条边的概率乘上分配的标号就是它的期望,所以我们肯定是把大的编号分配给走的概率最低的边. 我们只要计算出经过所有点的概率,就可以得出经过一条边(\(u->v\))的 ...
- bzoj 3143: [Hnoi2013]游走 高斯消元
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1026 Solved: 448[Submit][Status] ...
- BZOJ 3143 HNOI2013 游走 高斯消元 期望
这道题是我第一次使用高斯消元解决期望类的问题,首发A了,感觉爽爽的.... 不过笔者在做完后发现了一些问题,在原文的后面进行了说明. 中文题目,就不翻大意了,直接给原题: 一个无向连通图,顶点从1编号 ...
- bzoj 3143: [Hnoi2013]游走
Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点, ...
- bzoj 3143 [Hnoi2013]游走【高斯消元+dp】
参考:http://blog.csdn.net/vmurder/article/details/44542575 和2337有点像 设点u的经过期望(还是概率啊我也分不清,以下都分不清)为\( x[u ...
- bzoj 3143 [Hnoi2013]游走(贪心,高斯消元,期望方程)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3143 [题意] 给定一个无向图,从1走到n,走过一条边得到的分数为边的标号,问一个边的 ...
随机推荐
- Android 实现九宫格、点击图片放大全屏浏览等
项目GitHub地址https://github.com/tikeyc/TNinePlaceGridView_Android https://github.com/tikeyc/TikeycAndro ...
- Python进程间通信和网络基础
Python进程间通信和网络基础 Python支持多种进程间通讯的方式, 有单机通信的signal和mmap等, 也有可以通过网络的socket方式, 这里先介绍select等的有关知识, socke ...
- 2010: C语言实验——逆置正整数
2010: C语言实验——逆置正整数 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 949 Solved: 691[Submit][Status][We ...
- GYM 101604 || 20181010
看着前面咕咕咕的国庆集训 难受 十月十日要萌一天哇www A.字符串 题意:给定一个字符串 问能否交换两个字符或者不交换字符,使其成为回文串 之前写的太丑 重写一遍加一堆 if 竟然过了w 思路:求出 ...
- mysql存储引擎中InnoDB与Myisam的区别及应用场景
1. 区别: (1)事务处理: MyISAM是非事务安全型的,而InnoDB是事务安全型的(支持事务处理等高级处理): (2)锁机制不同: MyISAM是表级锁,而InnoDB是行级锁: (3)sel ...
- golang 强制重新全部编译
/home/用户名/.cache 删除缓存试试?? 修改的东西老失败 编译结果总不变 神奇了 go build -a -x -v加一句-a 强制重新编译.
- 在tomcat中配置连接池
在tomcat的conf/Catalina/localhost目录下配置项目路径,tomcat启动是会直接根据配置去加载项目. 虽然配置就一句话,但经常忘,今天记下来. 如果你的项目成名是:mypro ...
- iOS 静态库,动态库与 Framework
iOS 静态库,动态库与 Framework 静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我们会用到库呢 ...
- 通过工厂模式批量创建对象后调用其中方法 出现XXXis not a function()问题原因
//通过工厂模式批量创建 function Computer(color,weight,logo){ var obj=new Object(); obj.color=c ...
- 高度自适应的bug
今天在整理之前IFEde作业,发现有个简历的效果好像没实现.于是想把样式改成作业要求的那样. 作业要求是这样的: 右边栏昨晚高度是839px,我想把左边栏做成高度自适应的.但是没成功.现在我把这个问题 ...