Position:


List

Description

  • 一个无向连通图,顶点从1编号到N,边从1编号到M。
    小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编号的分数。当小Z 到达N号顶点时游走结束,总分为所有获得的分数之和。
    现在,请你对这M条边进行编号,使得小Z获得的总分的期望值最小。。

xSolution

整体理解:a[i][j]表示从i号点走到j号点概率次数。由于走到n不走了,故a[n][i]=0。i→i为-1。初始值a[1][n+1]=-1,代表从1号点出发次数为1。然后Gauss消元求出每个点的期望经过次数,那么对于一条边ei,它的期望经过次数就为e[i]=a[u[i]][n+1]/d[u[i]]+a[v[i]][n+1]/d[v[i]],将边的期望经过次数排序,根据贪心思想,次数多的边赋小值答案更优,ans=e[i]*(m-i+1)。
模板:高斯消元还是第一次写,O(n^3)。
深入理解:每一个未知数代表从这个点到达的次数,用它/出度即为对与它相邻边贡献。考虑一个点,到达次数f[i]=∑f[from]/d[from],移到左边-f[i]+∑f[from]/d[from]=0,特殊的,对于第一个点次数右边等于-1,即开始从这里出发,次数为1。对于第n个点,有点奇怪,到这个点的次数为0,这样是为了满足条件到了n号点,就不会出去了,不会对其它点的值造成影响,而最后也不是要求每个点到达次数期望。而是每条边的次数,而n也不会对与其相连的边的期望次数造成影响,所以Accept。

Code

// <hang.cpp> - 08/01/16 15:30:38
// This file is made by YJinpeng,created by XuYike's black technology automatically.
// Copyright (C) 2016 ChangJun High School, Inc.
// I don't know what this program is. #include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#define MOD 1000000007
#define EPS 1e-10
#define INF 1e9
using namespace std;
typedef long long LL;
const int MAXN=;
const int MAXM=;
inline int max(int &x,int &y) {return x>y?x:y;}
inline int min(int &x,int &y) {return x<y?x:y;}
inline int getint() {
register int w=,q=;register char ch=getchar();
while((ch<''||ch>'')&&ch!='-')ch=getchar();
if(ch=='-')q=,ch=getchar();
while(ch>=''&&ch<='')w=w*+ch-'',ch=getchar();
return q?-w:w;
}
double ans;
int n,m,d[MAXN],u[MAXN*MAXN],v[MAXN*MAXN];
double a[MAXN][MAXN],e[MAXN*MAXN];
void Gauss(){
for(int i=;i<=n;i++){
for(int k=i+;k<=n;k++)if(fabs(a[k][i])>fabs(a[i][i]))swap(a[k],a[i]);
for(int j=n+;j>=i;j--)a[i][j]/=a[i][i];
for(int k=i+;k<=n;k++)
for(int j=n+;j>=i;j--)a[k][j]-=a[k][i]*a[i][j];
}
for(int i=n;i;i--)
for(int k=i-;k;k--)a[k][n+]-=a[k][i]*a[i][n+];
}
int main()
{
freopen("hang.in","r",stdin);
freopen("hang.out","w",stdout);
n=getint();m=getint();
for(int i=;i<=m;i++){
u[i]=getint();v[i]=getint();
d[u[i]]++;d[v[i]]++;
}
for(int i=;i<=m;i++){
a[u[i]][v[i]]+=1.0/d[v[i]];
a[v[i]][u[i]]+=1.0/d[u[i]];
}
for(int i=;i<=n;i++)a[n][i]=,a[i][i]=-;
a[][n+]=-;ans=;Gauss();
for(int i=;i<=m;i++)e[i]=a[u[i]][n+]/d[u[i]]+a[v[i]][n+]/d[v[i]];
sort(e+,e++m);
for(int i=;i<=m;i++)ans+=e[i]*(m-i+);
printf("%.3f\n",ans);
return ;
}

【Hnoi2013】Bzoj3143 游走的更多相关文章

  1. [HNOI2013][BZOJ3143] 游走 - 高斯消元

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

  2. 【BZOJ3143】【HNOI2013】游走 && 【BZOJ3270】博物馆 【高斯消元+概率期望】

    刚学完 高斯消元,我们来做几道题吧! T1:[BZOJ3143][HNOI2013]游走 Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小 ...

  3. 「HNOI2013」游走

    「HNOI2013」游走 题目描述 一个无向连通图,顶点从 \(1\) 编号到 \(N\) ,边从 \(1\) 编号到 \(M\) .小 \(Z\) 在该图上进行随机游走,初始时小 \(Z\) 在 \ ...

  4. bzoj3143 游走

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

  5. bzoj3143 游走 期望dp+高斯消元

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

  6. 【BZOJ3143】【HNOI2013】游走 高斯消元

    题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3143 我们令$P_i$表示从第i号点出发的期望次数.则$P_n$显然为$0$. 对于$P ...

  7. 【BZOJ】【3143】【HNOI2013】游走

    数学期望/高斯消元/贪心 啊……用贪心的思路明显是要把经过次数期望越大的边的权值定的越小,那么接下来的任务就是求每条边的期望经过次数. 拆边为点?nonono,连接x,y两点的边的期望经过次数明显是 ...

  8. 【HNOI2013】游走

    题面 题解 图上的期望大部分是\(dp\),无向图的期望大部分是高斯消元 设\(f[i]\)表示走到点\(i\)的期望,\(d[i]\)表示\(i\)的度,\(to(i)\)表示\(i\)能到达的点集 ...

  9. bzoj3143游走

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3143 学到了无向图中点被经过的期望次数和边被经过的期望次数. 一个点被经过的期望次数  就是 ...

随机推荐

  1. 01网页<head></head>常用标记及属性

    网页<head></head>常用标记及属性 <!DOCTYPE html> <html> <head> <!--网页标题--> ...

  2. adb 命令实用

    1.adb安装:adbinstall.bat:原理:将apk文件拖进此bat,install命令会强制(覆盖)安装apk安装包.代码如下: @echo on adb install -r % paus ...

  3. boostrap标签

    字体: <lead>:加强显示 <strong><b>:字体加粗 <i><em>:斜体字 .text-muted:提示,使用浅灰色(#999 ...

  4. case when里的like功能 ////// 截取(substr)

    case when里的like功能 假如要用到case when又要用到like这样的功能,即如果字符串包含‘语文’就怎么怎么样,包含‘数学’就怎么怎么样,包含‘英语’就怎么怎么样,like是用于wh ...

  5. Re0:DP学习之路 01背包如何打印路径?

    伪代码 用二维数组记录,如果出现可以转移的dp那么记录bk[当前体积][装的物品]=1 输出的时候倒推,如果存在连通的边那么输出并且总共的体积减去输出的体积 代码(uva-624,目前wa不明所以,网 ...

  6. html option选中 回显 取值

    1.html <select class="form-control" id="sex"> <option value="-1&qu ...

  7. 爬虫之Requests库

    官方文档:http://cn.python-requests.org/zh_CN/latest/ 一.引子 import requests resp = requests.get("http ...

  8. python 配置文件 ConfigParser模块

    ConfigParser模块 用于生成和修改常见配置文档,当前模块的名称在 python 3.x 版本中变更为 configparser. 来看一个好多软件的常见文档格式如下 [DEFAULT] Se ...

  9. 移动端禁止滑动的js处理方式

    下面是禁止移动端滑动事件的方式,慎用  document.querySelector('body').addEventListener('touchmove', function (ev) {     ...

  10. 【01】CSS制作的图形

    [01]CSS制作的图形   绘制五角星:   通过border绘制三角形.然后通过transfrom来旋转35度. 绘制对称的图形,最后绘制顶部的三角形即可.   元素本身,加上:before和:a ...