题目链接: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]游走的更多相关文章

  1. bzoj 3143: [Hnoi2013]游走 高斯消元

    3143: [Hnoi2013]游走 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1026  Solved: 448[Submit][Status] ...

  2. bzoj 3143 [Hnoi2013]游走 期望dp+高斯消元

    [Hnoi2013]游走 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3394  Solved: 1493[Submit][Status][Disc ...

  3. BZOJ 3143 HNOI2013 游走 高斯消元 期望

    这道题是我第一次使用高斯消元解决期望类的问题,首发A了,感觉爽爽的.... 不过笔者在做完后发现了一些问题,在原文的后面进行了说明. 中文题目,就不翻大意了,直接给原题: 一个无向连通图,顶点从1编号 ...

  4. BZOJ 3143: [Hnoi2013]游走 [概率DP 高斯消元]

    一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编号的分 ...

  5. bzoj 3143: [Hnoi2013]游走

    Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点, ...

  6. BZOJ 3143: [Hnoi2013]游走 概率与期望+高斯消元

    Description 一个无向连通图,顶点从1编号到N,边从1编号到M.小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获 ...

  7. bzoj 3143 [Hnoi2013]游走(贪心,高斯消元,期望方程)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3143 [题意] 给定一个无向图,从1走到n,走过一条边得到的分数为边的标号,问一个边的 ...

  8. [BZOJ 3143][HNOI2013]游走(数学期望)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3143 分析: 易得如果知道了每条边经过的数学期望,那就可以贪心着按每条边的期望的大小赋 ...

  9. ●BZOJ 3143 [Hnoi2013]游走

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3143题解: 期望dp,高斯消元 首先有这样一种贪心分配边的编号的方案:(然后我没想到,233 ...

  10. BZOJ.3143.[HNOI2013]游走(概率 期望 高斯消元)

    题目链接 参考 远航之曲 把走每条边的概率乘上分配的标号就是它的期望,所以我们肯定是把大的编号分配给走的概率最低的边. 我们只要计算出经过所有点的概率,就可以得出经过一条边(\(u->v\))的 ...

随机推荐

  1. scanf,fscanf,sscanf的区别

    scanf是从文件中读 sscanf是从字符串中读 scanf是从键盘输入中读   fread :以字节位计算长度,按照指定的长度和次数读取数据,遇到结尾或完成指定长度读取后停止.fscanf :格式 ...

  2. 一起学习在 Ubuntu 上授予和移除 sudo 权限

    如你所知,用户可以在 Ubuntu 系统上使用 sudo 权限执行任何管理任务.在 Linux 机器上创建新用户时,他们无法执行任何管理任务,直到你将其加入 sudo 组的成员.在这个简短的教程中,我 ...

  3. shell命令行快捷键

    ctrl+a[A]:将光标移到命令行开头 ctrl+e[E]:将光标移到命令行结尾 ctrl+c[C]:强制终止命令执行 ctrl+u[U]:删除/剪切光标之前的所有字符 ctrl+y[Y]:粘贴ct ...

  4. slideDown留言板

    <!doctype html> <html lang="en"> <head> <meta http-equiv="Conten ...

  5. Golang操作Redis

    在系统环境下实现redis操作必须做好以下准备 一.当前系统必须下载安装redis 二.配置好GOPATH环境变量,并下载GO的redis驱动包 当做好以上准备工作时,紧接着如下 看以下要使用的驱动包 ...

  6. windows下常用linux对应工具

    tail 可从http://files.cnblogs.com/hantianwei/tail.zip下载,解压后exe,如下: e:\>tail -fn 300 tool-slow.logus ...

  7. 一句话说清楚cache和buffer

    我们说真正掌握和理解一个定义或者概念或者技术点最好的方式就是能够直观的展现它是什么样的,或者像什么样的,关于cache和buffer,刚刚看到一个极为显而易见的类比解释. buffer就像弹簧,用于减 ...

  8. Eclipse中ctrl+shift+r与ctrl+shift+t的区别

    eclipse中的两个常用的快捷键可以大大提升查找文件的效率,分别是: ctrl+shift+r : open resource, 打开资源. 它可以打开当前eclipse的工作区中所有(打开的)工程 ...

  9. 20145319 《网络渗透》免考—API拦截技术

    20145319 <网络渗透>免考-API拦截技术 概述 本次实验在window环境下进行,主要通过编写hook代码和注入程序,将我们的hook代码通过dll文件的形式注入到目标中,拦截其 ...

  10. bzoj 2527 Meteors - 整体二分 - 树状数组

    Description Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby gala ...