cf113D. Museum(期望 高斯消元)
题意
Sol
设\(f[i][j]\)表示Petya在\(i\),\(Vasya\)在\(j\)的概率,我们要求的是\(f[i][i]\)
直接列方程高斯消元即可,由于每个状态有两维,因此时间复杂度为\(O(n^6)\)
注意不能从终止节点转移而来
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 2333;
inline int read() {
char c = getchar(); int x = 0, f = 1;
while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * f;
}
int N, M, a, b, Lim;
double p[MAXN], f[MAXN][MAXN], E[MAXN][MAXN], deg[MAXN];
vector<int> v[MAXN];
int id[MAXN][MAXN], tot;
void Pre() {
f[id[a][b]][Lim + 1] = -1;
for(int i = 1; i <= N; i++) {
for(int j = 1; j <= N; j++) {
int now = id[i][j];
--f[now][now];//tag
if(i != j) f[now][now] += p[i] * p[j];
for(auto &x : v[i]) {
for(auto &y : v[j]) {
if(x == y) continue;
int nxt = id[x][y];
f[now][nxt] += (1.0 - p[x]) * (1.0 - p[y]) / deg[x] / deg[y];
}
}
for(auto &x : v[i]) {
int nxt = id[x][j];
if(x == j) continue;
f[now][nxt] += (1.0 - p[x]) * p[j] / deg[x];
}
for(auto &y : v[j]) {
int nxt = id[i][y];
if(i == y) continue;
f[now][nxt] += p[i] * (1.0 - p[y]) / deg[y];
}
}
}
}
void Gauss() {
for(int i = 1; i <= Lim; i++) {
int mx = i;
for(int j = i + 1; j <= Lim; j++) if(f[j][i] > f[mx][i] && f[j][i] != 0) swap(j, mx);
if(mx != i) swap(f[i], f[mx]);
// assert(fabs(f[i][i] < 1e-13));
for(int j = 1; j <= Lim; j++) {
if(i == j) continue;
double p = f[j][i] / f[i][i];
for(int k = i; k <= Lim + 1; k++) f[j][k] -= f[i][k] * p;
}
}
for(int i = 1; i <= Lim; i++) f[i][i] = f[i][Lim + 1] / f[i][i];
}
int main() {
N = read(); M = read(); a = read(); b = read(); Lim = N * N;
for(int i = 1; i <= M; i++) {
int x = read(), y = read();
v[x].push_back(y); v[y].push_back(x);
deg[x]++; deg[y]++;
}
for(int i = 1; i <= N; i++) scanf("%lf", &p[i]);
for(int i = 1; i <= N; i++)
for(int j = 1; j <= N; j++)
id[i][j] = ++tot;
Pre();
Gauss();
for(int i = 1; i <= N; i++) printf("%.10lf ", f[id[i][i]][id[i][i]]);
return 0;
}
cf113D. Museum(期望 高斯消元)的更多相关文章
- 【BZOJ】3143: [Hnoi2013]游走 期望+高斯消元
[题意]给定n个点m条边的无向连通图,每条路径的代价是其编号大小,每个点等概率往周围走,要求给所有边编号,使得从1到n的期望总分最小(求该总分).n<=500. [算法]期望+高斯消元 [题解] ...
- 【BZOJ】2337: [HNOI2011]XOR和路径 期望+高斯消元
[题意]给定n个点m条边的带边权无向连通图(有重边和自环),在每个点随机向周围走一步,求1到n的期望路径异或值.n<=100,wi<=10^9. [算法]期望+高斯消元 [题解]首先异或不 ...
- [BZOJ3143][HNOI2013]游走(期望+高斯消元)
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3576 Solved: 1608[Submit][Status ...
- 【BZOJ 3143】【Hnoi2013】游走 期望+高斯消元
如果纯模拟,就会死循环,而随着循环每个点的期望会逼近一个值,高斯消元就通过列方正组求出这个值. #include<cstdio> #include<cctype> #inclu ...
- [HNOI2013]游走 期望+高斯消元
纪念首道期望题(虽说绿豆蛙的归宿才是,但是我打的深搜总觉得不正规). 我们求出每条边的期望经过次数,然后排序,经过多的序号小,经过少的序号大,这样就可以保证最后的值最小. 对于每一条边的期望经过次数, ...
- UVa 10828 Back to Kernighan-Ritchie (数学期望 + 高斯消元)
题意:给定一个 n 个结点的有向图,然后从 1 结点出发,从每个结点向每个后继结点的概率是相同的,当走到一个没有后继结点后,那么程序终止,然后问你经过每个结点的期望是次数是多少. 析:假设 i 结点的 ...
- BZOJ2337: [HNOI2011]XOR和路径(期望 高斯消元)
题意 题目链接 Sol 期望的线性性对xor运算是不成立的,但是我们可以每位分开算 设\(f[i]\)表示从\(i\)到\(n\)边权为1的概率,统计答案的时候乘一下权值 转移方程为 \[f[i] = ...
- BZOJ.3143.[HNOI2013]游走(概率 期望 高斯消元)
题目链接 参考 远航之曲 把走每条边的概率乘上分配的标号就是它的期望,所以我们肯定是把大的编号分配给走的概率最低的边. 我们只要计算出经过所有点的概率,就可以得出经过一条边(\(u->v\))的 ...
- BZOJ 3143 游走(贪心+期望+高斯消元)
一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编号的分 ...
随机推荐
- Linux 学习错误点整理之网络配置
本人是一名实习生,最近在学习Linux,在实操的过程中还是遇到了一些问题,所以想记录下来,供自己以后复习,也希望能给跟我一样的菜鸟的人带来一点点帮助. 我用的是VMware Workstation P ...
- Python Web框架 tornado 异步原理
Python Web框架 tornado 异步原理 参考:http://www.jb51.net/article/64747.htm 待整理
- [转]Android中handler机制的原理
Andriod提供了Handler 和 Looper 来满足线程间的通信.Handler先进先出原则.Looper类用来管理特定线程内对象之间的消息交换(MessageExchange). 1)Loo ...
- Notepad++中代码格式化插件NppAStyle
本文以图片和说明,手把手教大家怎么让Notepad++中的代码风格看起来更美观. 工具/原料 Windows7 Notepad++ NppAStyle(Notepad++的一个插件) 方法/步骤 直 ...
- Linux的Bash Shell详解
一.Bash Shell概述 1.什么是bash bash是Bourne Again Shell的简称,是从unix系统中的sh发展而来的,是用户和Linux内核交互的工具,用户通过b ...
- C#基础篇八构造函数和面向对象思想
3.关于 对象创建的几个关键词 Dog d1 = new Dog(); Dog d1 叫做 声明变量 new Dog() 叫做 实例化(创建)对象 4.关于对象.方法和 this 的关系 Dog d1 ...
- Liferay7.0与cas单点登录配置
1.简介 Liferay7.0支持多种登录方式,包括:常规的.opensso.cas.ntlm.ldap.openid.Facebook.Google等. 其中, (1) 常规:则是默认Lif ...
- linux和docker的capabilities介绍
验证环境:centos7 x86/64 内核版本4.19.9 在linux 2.2版本之前,当内核对进程进行权限验证的时候,可以将进程划分为两类:privileged(UID=0)和unprivile ...
- python 生成唯一识别码
import uuid identity = str(uuid.uuid4()).encode('ascii')
- Maven <Profiles>定义不同环境的参数变量
记录一下 https://blog.csdn.net/qq245282209/article/details/52192115