【BZOJ】3143: [Hnoi2013]游走
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3143
显然如果一条边期望被走过的次数越多,我们就应该给它的编号越小。
所以问题变为如何求每一条边被经过的期望次数。
考虑直接求边的期望有点困难。
设:${g[i]}$表示经过第$i$条边的期望次数,${f[i]}$表示经过第$i$个点的期望次数,${du[i]}$表示第$i$个点的度数。
对于一条边$i$,假设这条边的两段的点分别为${x,y}$,则${g[i]=\frac{f[x]}{du[x]}*\frac{f[y]}{du[y]}}$
所以问题变为如何求每一个点被经过的期望次数
设$e[x][y]$表示点$x,y$之间有连边。这就很裸了,${f[i]=\sum (\frac{f[x]}{du[x]}\left [ e[i][x]=1 \right ] )}$,其中$n$号点只能走进去而不能出来,所以忽略不管,$1$号点应当强制$+1$(因为一开始就从$1$号点开始)
这样就得到了一个$n-1$个未知数和$n-1$个式子的方程组,高斯消元求得每个未知数的解(即${f[i]}$),然后求出${g[i]}$,然后从大到小排序。
$${\sum _{i=1}^{m}g[i]*i}$$
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstdlib>
#include<cmath>
#include<cstring>
using namespace std;
#define maxn 510
#define llg long long
#define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
llg n,m;
double a[maxn][maxn],du[maxn],f[maxn],g[maxn*maxn]; struct Edge{llg x,y;}e[maxn*maxn]; bool cmp(double x,double y){return x>y;} void guass()
{
llg r;
for (llg i=;i<=n;i++)
{
r=i;
for (llg j=i+;j<=n;j++) if (fabs(a[j][i])>fabs(a[r][i])) r=j;
if (r!=i) for (llg j=;j<=n+;j++) swap(a[r][j],a[i][j]); for (llg k=i+;k<=n;k++)
{
double F=a[k][i]/a[i][i];
for (llg j=i;j<=n+;j++) a[k][j]-=F*a[i][j];
}
} for (llg i=n;i>=;i--)
{
for (llg j=i+;j<=n;j++) a[i][n+]-=f[j]*a[i][j];
f[i]=a[i][n+]/a[i][i];
}
} void init()
{
llg x,y;
cin>>n>>m;
for (llg i=;i<=m;i++)
{
scanf("%lld%lld",&e[i].x,&e[i].y);
du[e[i].x]++,du[e[i].y]++;
}
for (llg i=;i<=m;i++)
{
x=e[i].x,y=e[i].y;
if (y!=n) {a[x][y]=1.00/du[y];}
if (x!=n) {a[y][x]=1.00/du[x];}
}
for (llg i=;i<n;i++) a[i][i]=-;
a[][n]=-;
n--;
} int main()
{
yyj("walk");
init();
guass();
for (llg i=;i<=m;i++) g[i]=f[e[i].x]/du[e[i].x]+f[e[i].y]/du[e[i].y];
double ans=;
sort(g+,g+m+,cmp);
for (llg i=;i<=m;i++) ans+=(double)i*g[i];
printf("%.3lf",ans);
return ;
}
【BZOJ】3143: [Hnoi2013]游走的更多相关文章
- bzoj 3143: [Hnoi2013]游走 高斯消元
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1026 Solved: 448[Submit][Status] ...
- bzoj 3143 [Hnoi2013]游走 期望dp+高斯消元
[Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3394 Solved: 1493[Submit][Status][Disc ...
- BZOJ 3143 HNOI2013 游走 高斯消元 期望
这道题是我第一次使用高斯消元解决期望类的问题,首发A了,感觉爽爽的.... 不过笔者在做完后发现了一些问题,在原文的后面进行了说明. 中文题目,就不翻大意了,直接给原题: 一个无向连通图,顶点从1编号 ...
- BZOJ 3143: [Hnoi2013]游走 [概率DP 高斯消元]
一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编号的分 ...
- bzoj 3143: [Hnoi2013]游走
Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点, ...
- BZOJ 3143: [Hnoi2013]游走 概率与期望+高斯消元
Description 一个无向连通图,顶点从1编号到N,边从1编号到M.小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获 ...
- bzoj 3143 [Hnoi2013]游走(贪心,高斯消元,期望方程)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3143 [题意] 给定一个无向图,从1走到n,走过一条边得到的分数为边的标号,问一个边的 ...
- [BZOJ 3143][HNOI2013]游走(数学期望)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3143 分析: 易得如果知道了每条边经过的数学期望,那就可以贪心着按每条边的期望的大小赋 ...
- ●BZOJ 3143 [Hnoi2013]游走
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3143题解: 期望dp,高斯消元 首先有这样一种贪心分配边的编号的方案:(然后我没想到,233 ...
- BZOJ.3143.[HNOI2013]游走(概率 期望 高斯消元)
题目链接 参考 远航之曲 把走每条边的概率乘上分配的标号就是它的期望,所以我们肯定是把大的编号分配给走的概率最低的边. 我们只要计算出经过所有点的概率,就可以得出经过一条边(\(u->v\))的 ...
随机推荐
- SQL Server 2012中的AlwaysOn尝试
简介 SQL Server2012中新增的AlwaysOn是一个新增高可用性解决方案.在AlwaysOn之前,SQL Server已经有的高可用性和数据恢复方案,比如数据库镜像,日志传送和故障转移 ...
- 使用隐含参数testMappingSpeed排查GoldenGate抽取慢的步骤
OGG经典抽取模式读取redo慢的检查步骤,可以采用以下几个步骤来排查. 步骤一,确认是否抽取进程的写入有问题 1. 在原有抽取进程上,执行如下命令,统计抽取进程的效率 GGSCI> stats ...
- 基于STM32F4移植W5500官方驱动库ioLibrary_Driver(转)
源: 基于STM32F4移植W5500官方驱动库ioLibrary_Driver 参考: 基于STM32+W5500 的Ethernet和Internet移植 Upgrade W5500 Throug ...
- 把你的Centos设置成代理ip服务器
前言:最近在公司做爬虫相关的工作,做过数据抓取的都知道,写程序抓取数据的过程并不像平常我们用浏览器打开网页那么简单!大多数的网站为了自己站点的性能和数据安全都设置了各种反爬策略.最常见的就是添加验证码 ...
- 使用splash爬去JavaScript动态请求的内容
https://blog.csdn.net/qq_32093267/article/details/78156184
- WINDOW 安装ImageMagick服务端和PHP的imagick插件
写在最前: windows下要注意的就是ImageMagick版本要与php扩展的Imagick能对应上,同时Imagick版本的选择也要与服务器环境以及php的情况对应上,不然就容易安装失败,我就是 ...
- 获取ip,获取客户端浏览器,获取客户端访问操作系统,获取客户端访问设备
/** * 获取ip */ public static function getIp() { if (getenv('HTTP_CLIENT_IP')) { $ip = getenv('HTTP_CL ...
- Golang框架beego电影网爬虫小试牛刀
学习了一段时间golang,又参考课程学习了beego开发网站爬虫,项目的目录结构是: 采集的目标是豆瓣网电影,入口地址是:https://movie.douban.com/subject/19008 ...
- MyBatis批量更新
逐条更新 这种方式显然是最简单,也最不容易出错的,即便出错也只是影响到当条出错的数据,而且可以对每条数据都比较可控. 代码 updateBatch(List<MyData> datas){ ...
- Lyft高管的技术团队管理实战
Lyft 的技术总监沈思维分享了他对于管理技术团队和打造工程文化的经验,也欢迎添加他的微信公众号"人家的屋顶"了解更多(微信公众号ID: othersroof).沈思维毕业于密歇根 ...