假如我们知道了每条边经过的期望次数,则变成了一个显然的贪心.现在考虑如何求期望次数. 由于走到每个点后各向等概率,很显然一条边的期望次数可以与它的两个端点的期望次数,转化为求点的期望次数 考虑每个点对另个点的贡献,得到方程组,暴力高斯消元 注意走到最后一个点就结束了,所以相当于它不能有出边 #include <bits/stdc++.h> #define eps 1e-6 using namespace std; const int N = 1005; double a[N][N]; int…
题目链接 参考 远航之曲 把走每条边的概率乘上分配的标号就是它的期望,所以我们肯定是把大的编号分配给走的概率最低的边. 我们只要计算出经过所有点的概率,就可以得出经过一条边(\(u->v\))的概率\(P_{ei}\).用\(dgr[i]\)表示点\(i\)的度数,那么\[P_{ei}=\frac{P_u}{dgr[u]}+\frac{P_v}{dgr[v]}\] 每个点的概率怎么求呢?就是\[P_i=\sum_{(i,j)\in G}\frac{P_j}{dgr[j]}\] 用\(a[i][j…
一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编号的分数.当小Z 到达N号顶点时游走结束,总分为所有获得的分数之和. 现在,请你对这M条边进行编号,使得小Z获得的总分的期望值最小.   输入保证30%的数据满足N≤10,100%的数据满足2≤N≤500且是一个无向简单连通图. 做过一道类似的后感觉比较简单了 求$f[i]$到每个点的概率 $f[i]=\…
传送门 显然只需要求出所有边被经过的期望次数,然后贪心把边权小的边定城大的编号. 所以如何求出所有边被经过的期望次数? 显然这只跟边连接的两个点有关. 于是我们只需要求出两个点被经过的期望次数. 对于一个点uuu,它被经过的期望次数f[u]=∑vf[v]/du[v]f[u]=\sum _v f[v]/du[v]f[u]=∑v​f[v]/du[v] 这是一个环上的递推式,我们可以用高斯消元解方程组. 代码: #include<bits/stdc++.h> #define N 505 #defin…
啊 我永远喜欢期望题 BZOJ 3143 游走 题意 有一个n个点m条边的无向联通图,每条边按1~m编号,从1号点出发,每次随机选择与当前点相连的一条边,走到这条边的另一个端点,一旦走到n号节点就停下.每经过一条边,要付出这条边的编号这么多的代价.现将所有边用1~m重新编号,使总代价的期望最小,求这个最小值. 题解 我们可以求出每条边的期望经过次数,然后贪心地让经过次数多的边编号小即可. 直接用边来列方程求经过次数似乎列不出来,我们借助点来列方程. 设x[u]为从某个点出发的次数的期望,v为与u…
题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=3143 (luogu) https://www.luogu.org/problemnew/show/P3232 题解: 水题.考虑如何求每个点的期望经过次数: 要求\(1\)号点开始\(n\)号点结束,那么\(1\)号点一定一上来就会经过一次,\(n\)号点一共只会经过\(1\)次.因此对于\(1\)到\(n-1\)的每一个点可以列出一个方程,其中\(1\)号点的方程是\…
题面 题解:因为异或不太好处理,,,因此按位来算,这样最后的答案就是每一位上的值乘对应的权值再求和.本着期望要倒退的原则,,,我们设$f[i]$表示从$i$到$n$,xor和为1的概率.那么观察$xor$的规则:1 xor 1 = 00 xor 1 = 1 ----> 当xor 1时,结果为1的概率 = 原本为0的概率1 xor 0 = 1 0 xor 0 = 0 ----> 当xor 0时,结果为1的概率 = 原本为1的概率因此我们有如下转移:$$f[x] = \frac{1}{d_{x}}…
应该是最后一道紫色的概率了....然而颜色啥也代表不了.... 首先看懂题意: 你现在有$p$点体力,你的体力上限为$n$ 在一轮中, 1.如果你的体力没有满,你有$\frac{1}{m + 1}$的几率回复一点体力 2.紧接着有$k$轮攻击,每轮攻击都有$\frac{1}{m + 1}$的几率使你掉一点体力 如果一轮后,你的体力$ \leq 0$,那么游戏结束 询问游戏结束的期望轮数 看懂题应该就懂了什么吧.... 设状态$f[i]$表示生命值为$i$游戏结束的期望轮数 那么 $$f[i] =…
考虑40分. 设出状态 f[i]表示匹配到了i位还有多少期望长度能停止.可以发现这个状态有环 需要高斯消元. 提供一种比较简单的方法:由于期望的线性可加性 可以设状态f[i]表示由匹配到i到匹配到i+1需要的期望长度. 需要预处理前缀和和KMP的nex数组来辅助转移. if(n==1) { gc(a); len=strlen(a+1); ll j=0; memset(nex,0,sizeof(nex)); rep(2,len,i) { while(j&&a[i]!=a[j+1])j=nex…
容易想到的做法是建出AC自动机,高斯消元.然而自动机上节点数量是nm的. 注意到我们要求的变量只有n个,考虑将其他不用求的节点合并为一个变量.这个变量即表示随机生成一个串,其不包含任何一个模板串的概率. 现在即有n+1个变量,考虑列出n+1个方程.设pi表示第i个人胜利的概率,显然有Σpi=1.然后对每个pi列一个方程,即考虑其胜利概率.在无胜利者的随机串后面接上这个串,这样这个人有可能成为胜利者,但也有可能之前的随机串加上这个串的一段前缀后已经包含了另一个串(可能是其自身),需要减掉这一部分.…