数学(概率):HNOI2013 游走
【题目描述】
一个无向连通图,顶点从1编号到N,边从1编号到M。
小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编号的分数。当小Z 到达N号顶点时游走结束,总分为所有获得的分数之和。
现在,请你对这M条边进行编号,使得小Z获得的总分的期望值最小。
【输入格式】
第一行是正整数N和M,分别表示该图的顶点数 和边数,接下来M行每行是整数u,v(1≤u,v≤N),表示顶点u与顶点v之间存在一条边。 输入保证30%的数据满足N≤10,100%的数据满足2≤N≤500且是一个无向简单连通图。
【输出格式】
仅包含一个实数,表示最小的期望值,保留3位小数。
【样例输入】
3 3
2 3
1 2
1 3
【样例输出】
3.333
【提示】
边(1,2)编号为1,边(1,3)编号2,边(2,3)编号为3。
这道题目,先求每个点经过的期望次数,我觉得一般是用正推的,然后贪心。
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
const int N=,M=N*N;
int n,m,e[M][],d[N];
long double A[N][N];
double ans,w[M],x[N];
void Guass_Elimination(){
for(int i=;i<n;i++){
int p=i;
for(int j=i+;j<n;j++)
if(fabs(A[p][i])<fabs(A[j][i]))
p=j;
if(p!=i)
for(int j=;j<=n;j++)
swap(A[i][j],A[p][j]);
long double tmp=A[i][i];
for(int j=;j<=n;j++)
A[i][j]/=tmp;
for(int j=;j<n;j++)
if(i!=j){
tmp=A[j][i];
for(int k=;k<=n;k++)
A[j][k]-=tmp*A[i][k];
}
}
for(int i=;i<n;i++)
x[i]=A[i][n];
}
int main(){
freopen("walk.in","r",stdin);
freopen("walk.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++){
scanf("%d%d",&e[i][],&e[i][]);
d[e[i][]]+=;d[e[i][]]+=;
}A[][n]=;
for(int i=;i<n;i++)A[i][i]=;
for(int i=;i<=m;i++){
if(e[i][]==n||e[i][]==n)continue;
A[e[i][]][e[i][]]+=-1.0/d[e[i][]];
A[e[i][]][e[i][]]+=-1.0/d[e[i][]];
}
Guass_Elimination();
for(int i=;i<=m;i++){
w[i]+=x[e[i][]]/d[e[i][]];
w[i]+=x[e[i][]]/d[e[i][]];
}
sort(w+,w+m+);
for(int i=;i<=m;i++)
ans+=w[i]*(m-i+);
printf("%.3lf\n",ans);
return ;
}
数学(概率):HNOI2013 游走的更多相关文章
- bzoj 3143: [Hnoi2013]游走 高斯消元
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1026 Solved: 448[Submit][Status] ...
- [补档][Hnoi2013]游走
[Hnoi2013]游走 题目 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一 ...
- [HNOI2011]XOR和路径 && [HNOI2013]游走
[HNOI2011]XOR和路径 题目大意 具体题目:戳我 题目: 给定一个n个点,m条边的有重边.有自环的无向图,其中每个边都有一个边权. 现在随机选择一条1到n的路径,路径权值为这条路径上所有边权 ...
- BZOJ_3143_[Hnoi2013]游走_期望DP+高斯消元
BZOJ_3143_[Hnoi2013]游走_期望DP+高斯消元 题意: 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机 ...
- P3232 [HNOI2013]游走 解题报告
P3232 [HNOI2013]游走 题目描述 一个无向连通图,顶点从\(1\)编号到\(N\),边从\(1\)编号到\(M\). 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概 ...
- [BZOJ3143][HNOI2013]游走(期望+高斯消元)
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3576 Solved: 1608[Submit][Status ...
- 【BZOJ3143】[Hnoi2013]游走 期望DP+高斯消元
[BZOJ3143][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 ...
- BZOJ3141 Hnoi2013 游走 【概率DP】【高斯消元】*
BZOJ3141 Hnoi2013 Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点 ...
随机推荐
- 佛主保佑,永无bug
/* _ooOoo_ o8888888o 88" . "88 ...
- HTML+CSS基础学习笔记(2)
一.无序列表标签ul <ul> <li>信息</li> <li>信息</li> ...... </ul> 代码解释:每项< ...
- SqlSugar-执行Sql语句查询实例
使用SqlSugar执行sql语句 1.简单查询 SqlSugarClient db = SugarContext.GetInstance(); //执行sql语句,处理 //1.执行sql,转成li ...
- Java5中的线程池实例讲解
Java5增加了新的类库并发集java.util.concurrent,该类库为并发程序提供了丰富的API多线程编程在Java 5中更加容易,灵活.本文通过一个网络服务器模型,来实践Java5的多线程 ...
- GET请求和POST请求
A:有哪些get请求呢? a.在浏览器地址栏直接输入一个请求地址 b.点击超链接 c.表单默认的提交方式method="GET/get" B:get请求方式的特点 a.会将请求参数 ...
- Oracle数据库学习 视图、序列及存储过程
视图(View) 视图也被称作虚表,也就是虚拟的表,是一组数据的逻辑表示. 视图对应一个select语句,结果集被赋予一个名字,也就是视图的名字. 视图本身不包含任何数据,它只是包含映射到基表的一个查 ...
- (正则表达式应用) 替换自闭合标签(self-closing tag)的method
var str = "<sup><div class=\"he's\"/></sup><span id=\"cs\&q ...
- Java基础--Java内存管理与垃圾回收
Java自动内存管理 在讲解内存管理之前,首先需要了解对象和对象引用的区别 对象是类的一个实例,以人这个类为例,Person是我们定义的一个类 public class Person{} publ ...
- boost::bind实践2——来自《Beyond the C++ Standard Library ( An Introduction to Boost )》
直接代码: 代码段1: #include <iostream> #include <string> #include <boost/bind/bind.hpp> c ...
- 中文翻译:pjsip教程(三)之ICE stream transport的使用
1:pjsip教程(一)之PJNATH简介 2:pjsip教程(二)之ICE穿越打洞:Interactive Connectivity Establishment简介 3:pjsip教程(三)之ICE ...