3143: [Hnoi2013]游走

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 3171  Solved: 1390
[Submit][Status][Discuss]

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位小数。

Sample Input

3 3
2 3
1 2
1 3

Sample Output

3.333

无向连通图

只要知道每条边经过的期望,就可以排序贪心了

而对于边e(u, v),经过这条边的期望为:经过u点的期望/u点度数+经过v点的期望/v点度数

所以这题还是求经过每个点次数的期望

设经过第i个点的期望次数为x[i],第i个点度数为in[i],那么有方程组

x[i] = ∑(x[j]/in[j]) (存在边e(i, j), j!=n)

但是1号点和n号点特殊,一开始就在1号点所以

x[1]-1 = ∑(x[j]/in[j]) (存在边e(1, j), j!=n)

而到了n号点就结束了所以

1-x[n] = ∑(x[j]/in[j]) (存在边e(n, j), j!=n),这也是为什么所有的方程都要j!=n

这样就可以列出n个n元方程,高斯消元求解即可

最后求出边期望贪心

#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
typedef struct Road
{int x, y;double q;bool operator < (const Road &b) const{if(q<b.q)return 1;return 0;}
}Road;
Road s[250005];
double Jz[505][505], c[505], in[505];
void Gauss(int n, int m)
{int i, j, p, q, r;p = q = 1;while(p<=n && q<=m){r = p;for(i=p+1;i<=n;i++){if(fabs(Jz[i][q])>fabs(Jz[r][q]))r = i;}/*if(fabs(Jz[r][q])<eps)return 0;  ----方程无解*/for(i=q;i<=m;i++)swap(Jz[r][i], Jz[p][i]);swap(c[r], c[p]);c[p] /= Jz[p][q];for(i=q+1;i<=m;i++)Jz[p][i] /= Jz[p][q];for(i=1;i<=n;i++){if(Jz[i][q] && i!=p){for(j=q+1;j<=m;j++)Jz[i][j] -= Jz[p][j]*Jz[i][q];c[i] -= c[p]*Jz[i][q];Jz[i][q] = 0;}}q++, p++;}//return 1;
}
int main(void)
{int n, m, i;double ans;scanf("%d%d", &n, &m);for(i=1;i<=m;i++){scanf("%d%d", &s[i].x, &s[i].y);in[s[i].x]++, in[s[i].y]++;}c[1] = -1, c[n] = 1;for(i=1;i<=n-1;i++)Jz[i][i] = -1;for(i=1;i<=m;i++){Jz[s[i].x][s[i].y] += 1/in[s[i].y];Jz[s[i].y][s[i].x] += 1/in[s[i].x];}for(i=1;i<=n-1;i++)Jz[i][n] = 0;Jz[n][n] = 1;Gauss(n, n);for(i=1;i<=m;i++)s[i].q = c[s[i].x]/in[s[i].x]+c[s[i].y]/in[s[i].y];sort(s+1, s+m+1);ans = 0;for(i=1;i<=m;i++)ans += (m-i+1)*s[i].q;printf("%.3f\n", ans);return 0;
}

bzoj 3143: [Hnoi2013]游走(高斯消元)相关推荐

  1. BZOJ 3143: [Hnoi2013]游走 高斯消元 期望

    3143: [Hnoi2013]游走 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 3463  Solved: 1535 [Submit][Stat ...

  2. [BZOJ 3143][Hnoi2013]游走(高斯消元+期望)

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

  3. 【BZOJ】3143: [Hnoi2013]游走 期望+高斯消元

    [题意]给定n个点m条边的无向连通图,每条路径的代价是其编号大小,每个点等概率往周围走,要求给所有边编号,使得从1到n的期望总分最小(求该总分).n<=500. [算法]期望+高斯消元 [题解] ...

  4. BZOJ 3270: 博物馆 [概率DP 高斯消元]

    http://www.lydsy.com/JudgeOnline/problem.php?id=3270 题意:一张无向图,一开始两人分别在$x$和$y$,每一分钟在点$i$不走的概率为$p[i]$, ...

  5. BZOJ 2115 Wc2011 Xor DFS+高斯消元

    标题效果:鉴于无向图.右侧的每个边缘,求一个1至n路径,右上路径值XOR和最大 首先,一个XOR并能为一个路径1至n简单的路径和一些简单的XOR和环 我们开始DFS获得随机的1至n简单的路径和绘图环所 ...

  6. BZOJ 2728 HNOI2012 与非 高斯消元

    题目大意:给定k位二进制下的n个数,求[l,r]区间内有多少个数能通过这几个数与非得到 首先观察真值表 我们有A nand A = not A 然后就有not ( A nand B ) = A and ...

  7. 线性代数五之高斯消元——[SDOI2010]外星千足虫,[HNOI2013]游走,[HNOI2011]XOR和路径,[hdu 4035]Maze

    多类型高斯消元杂题 [SDOI2010]外星千足虫 description solution code [HNOI2013]游走 description solution code [HNOI2011 ...

  8. 高斯消元配合概率dp-图上随机游走模型

    题目1:[HNOI2013]游走 题目大意 给你一张无向连通图,从第111点随机游走到nnn点.花费为经过的边的编号的和.问你如何安排边的编号使得期望花费最小化. n≤500,m≤n2n \leq 5 ...

  9. bzoj3143,P3232-[Hnoi2013]游走【数学期望,高斯消元,贪心】

    正题 题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3143 https://www.luogu.org/problem/P3232 题 ...

最新文章

  1. php 图片在线编辑功能,summernote在线编辑器提交的内容PHP处理其中图片函数
  2. InnoDB O_DIRECT选项漫谈(一)【转】
  3. c语言姓名号码,c语言如何输入编号和姓名
  4. leetcode860. 柠檬水找零(贪心)
  5. N皇后问题12 · N-Queens
  6. 系统调用和库函数的区别
  7. 【华为云技术分享】《跟唐老师学习云网络》— Ping喂报文
  8. sql 分组求和_《从零学会SQL-第七关高级功能》课后练习
  9. 9型转x型 cobol_9家企业入列省首批试点 建设培育产教融合型企业
  10. hibernate 的第一个工程
  11. Redis 主从 keepalived高可用 实现 VIP 自动漂移
  12. ffmpeg支持的扩展库有哪些
  13. java技术cad转图片_一键完成百张图纸转换,教你最简单CAD转JPG格式方法,只需三步...
  14. dws中间表模型设计: 页面受访明细宽表
  15. 苹果8参数_iPhone11 iPhone11Pro哪里买最便宜靠谱划算 2020双十一苹果手机购机攻略...
  16. ngx之日志切割 、ngx信号
  17. 不用重做系统,教你如何把机械硬盘上面的系统迁移到固态硬盘!
  18. 【入门数据分析】淘宝用户行为分析
  19. 关于STM32的SPI外设时钟分频对应的SCK速率
  20. Pandas——掌握DataFrame的常用操作

热门文章

  1. python怎么下载教程-Python爬虫文件下载图文教程
  2. python软件下载安装中文版-pathon软件下载 python官方中文版3.6.0
  3. python零基础能学吗-零基础怎么样才能学好Python?Python入门必看
  4. 0基础学python要多久-零基础零经验自学Python,到精通Python要多久啊?
  5. python自动化办公教程-Python自动化办公之操作Excel文件
  6. 人物 | 当我们在谈论语音识别时,我们在谈些什么?——知乎达人、CMU博士生王赟...
  7. php开发v2ex,继续求 PHP 开发工作
  8. LeetCode 172 阶乘后的0
  9. J2EE中使用MediaInfo库获取视频信息
  10. html选择同级的元素,jquery获取同级元素