bzoj3143 游走
Description
一个无向连通图,顶点从1编号到N,边从1编号到M。
小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编号的分数。当小Z 到达N号顶点时游走结束,总分为所有获得的分数之和。
现在,请你对这M条边进行编号,使得小Z获得的总分的期望值最小。
Input
第一行是正整数N和M,分别表示该图的顶点数 和边数,接下来M行每行是整数u,v(1≤u,v≤N),表示顶点u与顶点v之间存在一条边。 输入保证30%的数据满足N≤10,100%的数据满足2≤N≤500且是一个无向简单连通图。
Output
仅包含一个实数,表示最小的期望值,保留3位小数。
#include<cstdio>
#include<vector>
#include<algorithm>
int n,m,a,b;
std::vector<int>es[];
double xs[][],ys[],x[],ans=;
int o[];
inline bool is0(double x){return x<1.0e-10&&x>-1.0e-10;}
inline bool isn0(double x){return x>=1.0e-10||x<=-1.0e-10;}
struct edge{
int a,b;
double v;
}e[];
int ep=;
bool operator<(edge a,edge b){
return a.v>b.v;
}
int main(){
scanf("%d%d",&n,&m);
while(m--){
scanf("%d%d",&a,&b);
es[a].push_back(b);
es[b].push_back(a);
o[a]++;o[b]++;
e[ep].a=a;e[ep++].b=b;
}
for(int i=;i<=n;i++){
for(int j=;j<=n;j++)xs[i][j]=;
xs[i][i]=-;
for(int j=;j<es[i].size();j++){
int u=es[i][j];
if(u!=n)xs[i][u]+=1.0/o[u];
}
ys[i]=;
}
ys[]=-;
for(int t=;t<=n;t++){
if(is0(xs[t][t]))
for(int i=t+;i<=n;i++){
if(isn0(xs[i][t])){
for(int j=t;j<=n;j++){double v=xs[i][j];xs[i][j]=xs[t][j];xs[t][j]=v;}
double v=ys[i];ys[i]=ys[t];ys[t]=v;
}
}
double c=1.0/xs[t][t];
for(int i=t;i<=n;i++)xs[t][i]*=c;
ys[t]*=c;
for(int i=t+;i<=n;i++){
if(isn0(xs[i][t])){
double k=xs[i][t];
for(int j=t;j<=n;j++){
xs[i][j]-=xs[t][j]*k;
}
ys[i]-=ys[t]*k;
}
}
}
for(int t=n;t;t--){
for(int i=t+;i<=n;i++){
ys[t]-=xs[t][i]*x[i];
}
x[t]=ys[t];
}
for(int i=;i<ep;i++){
e[i].v=;
if(e[i].a!=n)e[i].v+=x[e[i].a]/o[e[i].a];
if(e[i].b!=n)e[i].v+=x[e[i].b]/o[e[i].b];
}
std::sort(e,e+ep);
for(int i=;i<ep;i++)ans+=e[i].v*(i+);
printf("%.3lf\n",ans);
return ;
}
bzoj3143 游走的更多相关文章
- 【Hnoi2013】Bzoj3143 游走
Position: http://www.lydsy.com/JudgeOnline/problem.php?id=3143 List Bzoj3143 Hnoi2013 游走 List Descri ...
- [HNOI2013][BZOJ3143] 游走 - 高斯消元
题目描述 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边 ...
- bzoj3143 游走 期望dp+高斯消元
题目传送门 题意: 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得 ...
- bzoj3143游走
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3143 学到了无向图中点被经过的期望次数和边被经过的期望次数. 一个点被经过的期望次数 就是 ...
- bzoj3143游走——期望+高斯消元
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3143 只需算出每条边被经过的概率,将概率从小到大排序,从大到小编号,就可得到最小期望: 每条 ...
- 【BZOJ3143】游走(高斯消元,数学期望)
[BZOJ3143]游走(高斯消元,数学期望) 题面 BZOJ 题解 首先,概率不会直接算... 所以来一个逼近法算概率 这样就可以求出每一条边的概率 随着走的步数的增多,答案越接近 (我卡到\(50 ...
- 【BZOJ3143】[Hnoi2013]游走 期望DP+高斯消元
[BZOJ3143][Hnoi2013]游走 Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 ...
- 【BZOJ3143】【HNOI2013】游走 && 【BZOJ3270】博物馆 【高斯消元+概率期望】
刚学完 高斯消元,我们来做几道题吧! T1:[BZOJ3143][HNOI2013]游走 Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小 ...
- 【BZOJ-3143】游走 高斯消元 + 概率期望
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2264 Solved: 987[Submit][Status] ...
随机推荐
- struts2 的学习
1.struts.xml 中的action不是代表一个action类(控制器),而是代表一次访问,所以action的name属性和访问路径有关.配置文件中的package的namespace属性其实就 ...
- QT环境下实现UI界面的“拼图游戏”
main.cpp #include "mainwindow.h" #include <QApplication> int main(int argc, char *ar ...
- android机顶盒真机调试方法
最近接触电视APP开发,之前对Android开发也不太了解还一直以为不能真机调试.最近静下心来想一想肯定能真机调试的,我是我不知道而已.现在讲述一下真机调试的步骤: 1.进入设置--关于,连续点击版本 ...
- <转>字符编码
转: 字符编码笔记:ASCII,Unicode和UTF-8 作者: 阮一峰 日期: 2007年10月28日 今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料. ...
- windows : Jmeter自动化测试-eclipse+maven+jmeter
前提 在window上已经安装maven并且在eclipse中配置好了maven,如果没有配置,参考文章 windows上安装maven及eclipse中配置maven 一.创建一个包含jmete ...
- 【跟着stackoverflow学Pandas】 - Adding new column to existing DataFrame in Python pandas - Pandas 添加列
最近做一个系列博客,跟着stackoverflow学Pandas. 以 pandas作为关键词,在stackoverflow中进行搜索,随后安照 votes 数目进行排序: https://stack ...
- Intellij Idea2016.3 svn服务器拉取代码
1.修改idea的默认配置,取消SVN设置里的两个勾 2.拉取代码 3.输入SVN仓库的地址,然后checkout 即可
- 微信小程序之蓝牙开发(详细读数据、写数据、附源码)
本文将详细介绍微信小程序的蓝牙开发流程(附源码)准备:微信只支持低功耗蓝牙也就是蓝牙4.0,普通的蓝牙模块是用不了的,一定要注意. 蓝牙可以连TTL接到电脑上,再用XCOM调试 一开始定义的变量 va ...
- Texas Instruments matrix-gui-2.0 hacking -- execute_command.sh
#!/bin/sh #Copyright (C) Texas Instruments Incorporated - http://www.ti.com/ # # # Redistribution an ...
- [LeetCode&Python] Problem 463. Island Perimeter
You are given a map in form of a two-dimensional integer grid where 1 represents land and 0 represen ...