bzoj 3143 随机游走
题意:
给一个简单无向图,一个人从1号节点开始随机游走(即以相同概率走向与它相邻的点),走到n便停止,问每条边期望走的步数.
首先求出每个点期望走到的次数,每条边自然是从它的两个端点走来.
/**************************************************************
Problem: 3143
User: idy002
Language: C++
Result: Accepted
Time:736 ms
Memory:9956 kb
****************************************************************/ #include <cstdio>
#include <cmath>
#include <algorithm>
#define N 510
#define M N*N
using namespace std; int n, m;
int head[N], dest[M], next[M], etot;
int dgr[N], uu[M], vv[M], qu[M];
double ww[M];
double a[N][N]; void adde( int u, int v ) {
etot++;
dest[etot] = v;
next[etot] = head[u];
head[u] = etot;
}
void gauss() {
int i, j, k;
for( i=; i<=n; i++ ) {
j=i;
for( k=i+; k<=n; k++ )
if( fabs(a[k][i])>fabs(a[j][i]) ) j=k;
for( k=i; k<=n+; k++ )
swap( a[j][k], a[i][k] );
for( j=i+; j<=n; j++ ) {
double r = a[j][i]/a[i][i];
for( k=i; k<=n+; k++ )
a[j][k] -= a[i][k]*r;
}
}
for( int i=n; i>=; i-- ) {
a[i][n+] /= a[i][i];
a[i][i] = 1.0;
for( int j=i-; j>=; j-- ) {
a[j][n+] -= a[j][i]*a[i][n+];
a[j][i] = 0.0;
}
}
}
bool cmp( int a, int b ) {
return ww[a] > ww[b];
}
int main() {
scanf( "%d%d", &n, &m );
for( int i=; i<=m; i++ ) {
scanf( "%d%d", uu+i, vv+i );
adde( uu[i], vv[i] );
adde( vv[i], uu[i] );
dgr[uu[i]]++;
dgr[vv[i]]++;
}
for( int i=; i<=n; i++ )
a[i][i] = -1.0;
a[][n+] = -;
for( int u=; u<=n; u++ ) {
for( int t=head[u]; t; t=next[t] ) {
int v=dest[t];
if( v==n ) continue;
a[u][v] += 1.0/dgr[v];
}
}
gauss();
for( int i=; i<=m; i++ ) {
int u=uu[i], v=vv[i];
if( u!=n ) ww[i]+=a[u][n+]/dgr[u];
if( v!=n ) ww[i]+=a[v][n+]/dgr[v];
}
for( int i=; i<=m; i++ )
qu[i] = i;
sort( qu+, qu++m, cmp );
double ans = 0.0;
for( int i=; i<=m; i++ )
ans += i * ww[qu[i]];
printf( "%.3lf\n", ans );
}
bzoj 3143 随机游走的更多相关文章
- BZOJ 3143 HNOI2013 游走 高斯消元 期望
这道题是我第一次使用高斯消元解决期望类的问题,首发A了,感觉爽爽的.... 不过笔者在做完后发现了一些问题,在原文的后面进行了说明. 中文题目,就不翻大意了,直接给原题: 一个无向连通图,顶点从1编号 ...
- bzoj 3143: [Hnoi2013]游走 高斯消元
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1026 Solved: 448[Submit][Status] ...
- 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]游走 期望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]游走(贪心,高斯消元,期望方程)
[题目链接] 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 ...
随机推荐
- 用secureCRT操作ubuntu终端
用secureCRT操作ubuntu终端 ubuntu下先安装ssh windows下win+R再输入ubuntu的ip地址 ubuntu 检测端口号的命令 netstat -antp 下载到 ...
- SharePoint 2013 Workflow Manager 1.0 卸载
一:环境 Window server 2012 r2 Standard SharePoint Server 2013 with sp1 二:开始菜单---Workflow Manager 配置---退 ...
- Visual Studio 2017中的快捷键
Ctrl+Tab: 快速切换活动文件
- 53环境Jenkins新增工程配置
1. 登录http://10.179.175.53:8080/环境. 2. 点击新建任务,输入任务名称,并在复制一个NOS的类似工程即可. 3. 在配置页面,修改源码地址: 4. 点击完成,执行构建, ...
- js 将图片连接转换称base64格式
我们把图像文件的内容直接写在了HTML 文件中,这样做的好处是,节省了一个HTTP 请求.坏处呢,就是浏览器不会缓存这种图像.现在我们提供一个js: function convertImgToBase ...
- Linux服务器性能评估
一.影响Linux服务器性能的因素 1. 操作系统级 CPU 内存 磁盘I/O带宽 网络I/O带宽 2. 程序应用级 二.系统性能评估标准 影响性能因素 影响性能因素 评判标准 好 坏 糟糕 CPU ...
- pandas使用lambda判断元素是否为空或者None
df2a_tp2 = df2a[df2a['combineIdentifyCode'].map(lambda x: len(str(x).strip())>0)].copy() #识别出合单的订 ...
- java比较两个对象是否相等?
1.判断两个对象是否是同一个引用对象则用==,"=="比的是地址.因为如果地址相同,则就是同一个对象(java中如果两对象(obj1,obj2)相等,那么在修改obj2的时候,ob ...
- xpath定位
XML 实例文档 我们将在下面的例子中使用这个 XML 文档. <?xml version="1.0" encoding="ISO-8859-1"?> ...
- Java编码与乱码问题
一.为什么要编码? 由于人类的语言太多,因而表示这些语言的符号太多,无法用计算机的一个基本的存储单元----byte来表示,因而必须要经过拆分或一些翻译工作,才能让计算机能理解. byte一个字节即8 ...