传送门 题意 给出一张图,LL从一个点等概率走到上下左右位置,询问LL从宿舍走到餐厅的步数期望 分析 该题是一道高斯消元+期望的题目 难点在于构造矩阵,我们发现以下结论 设某点走到餐厅的期望为Ek 1.当该点为餐厅,Ek=0 2.\(Ek=\sum_{i=1}^{cnt}Enexti-1\) 我们先BFS将可达点标号,再构建矩阵,再高斯消元,最后A[vis[sx][sy]][id]为所求解 trick 代码 #include<bits/stdc++.h> using namespace std…
传送门 题意 一个人在数轴上来回走,以pi的概率走i步i∈[1, m],给定n(数轴长度),m,e(终点),s(起点),d(方向),求从s走到e经过的点数期望 分析 设E[x]是人从x走到e经过点数的期望值,显然对于终点有:E[e] = 0 一般的:\[E[x] = \sum_i^m((E[x+i]+i) * p[i])\] (走i步经过i个点,所以是E[x+i]+i) 建立模型:高斯消元每个变量都是一个互不相同的独立的状态,由于人站在一个点,还有一个状态是方向!例如人站在x点,有两种状态向前.…
Time travel Problem Description Agent K is one of the greatest agents in a secret organization called Men in Black. Once he needs to finish a mission by traveling through time with the Time machine. The Time machine can take agent K to some point (0…
这道题是我第一次使用高斯消元解决期望类的问题,首发A了,感觉爽爽的.... 不过笔者在做完后发现了一些问题,在原文的后面进行了说明. 中文题目,就不翻大意了,直接给原题: 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编号的分数.当小Z 到达N号顶点时游走结束,总分为所有获得的分数之和. 现在,请你对这M条边进行编号,使得小Z获得的总分的期望值最小.…
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=3270 \(n\)个房间,刚开始两个人分别在\(a,b\),每分钟在第\(i\)个房间有\(p[i]\)的概率不动,如果动的话,等概率移动到连接的房间,求他们在每个房间相遇的概率. 分析 有点像BZOJ_1778_[Usaco2010_Hol]_Dotp_驱逐猪猡_(期望动态规划+高斯消元+矩阵)那道题. 在那道题里,转移的是炸弹,这道题里,转移的是两个人的状态. 我们把一个甲在\(i\),乙…
传送门 所以说我讨厌数学……期望不会高斯消元也不会……好不容易抄好了高斯消元板子被精度卡成琪露诺了…… 首先,我们先算出走每一条边的期望次数,那么为了最小化期望,就让大的期望次数乘上小编号 边的期望次数是多少呢?可以先算出点的概率 $p(u,v)=\frac{p[u]}{d[u]}+\frac{p[v]}{d[v]}$ $p[u]$表示经过这个点的期望次数,$d[u]$表示这个点的度数 那么点的期望次数怎么求? $p[u]=\sum_{(u,v)\in E}\frac{p[v]}{d[v]}$…
传送门 题目描述 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编号的分数.当小Z 到达N号顶点时游走结束,总分为所有获得的分数之和. 现在,请你对这M条边进行编号,使得小Z获得的总分的期望值最小. 输入输出格式 输入格式: 第一行是正整数N和M,分别表示该图的顶点数 和边数,接下来M行每行是整数u,v(1<=u,v<=N),表示顶点u与顶点v之间存…
传送门 解题思路 设\(f(x)\)表示到\(x\)这个点的期望次数,那么转移方程为\(f(x)=\sum\frac{f(u)*(1 - \frac{p}{q})}{deg(u)}\),其中\(u\)为与\(x\)相连的点,\(deg(u)\)为\(u\)的度数.转移方程很好理解的,而每个点的爆炸概论就等于\(f(x)*\frac{p}{q}\).之后做一遍高斯消元就行了. 代码 #include<iostream> #include<cstdio> #include<cst…
BZOJ 2337 XOR和路径 题解 这道题和游走那道题很像,但又不是完全相同. 因为异或,所以我们考虑拆位,分别考虑每一位: 设x[u]是从点u出发.到达点n时这一位异或和是1的概率. 对于所有这一位是1的边,若一个端点是u.另一个是v,则x[u] += (1 - x[v]) / deg[u],反之亦然: 对于这一位是0的边,x[u] += x[v] / deg[u],反之亦然. 然后得到好多方程,高斯消元即可. #include <cstdio> #include <cmath&g…
先Tarjan缩点 强连通分量里用高斯消元外面直接转移 注意删掉终点出边和拓扑 #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<queue> #include<vector> #define N 10010 #define M 1000010 using namespace std; typedef double D;…