题目链接

https://codeforces.com/contest/113/problem/D

思路

\(k[i]=\frac{1-p[i]}{ru[i]}\)

f[i][j]表示经过i和j的次数的期望=概率

\(f[i][j]=p[i]*p[j]*f[i][j]\)

\(+k[i]*p[j]*f[u][j]\)

\(+p[i]*k[j]*f[i][v]\)

\(+k[i]*k[j]*f[u][v]\)

把右边的f[i][j]边移过去

可以用高斯消元解方程来进行dp

错误

好多细节没明白

比如f[s][s]=1

orzattack

代码

#include <iostream>
#include <vector>
#include <cmath>
#include <cstdio>
const int N=500;
using namespace std;
int read() {
int x=0,f=1;char s=getchar();
for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;
for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';
return x*f;
}
int n,m,a,b,ru[N],id[N][N];
vector<int> G[N];
double k[N],p[N],f[N][N];
void init() {
f[id[a][b]][n*n+1]=-1;
for(int i=1;i<=n;++i) {
for(int j=1;j<=n;++j) {
int sdgzy=id[i][j];
--f[sdgzy][sdgzy];
if(i!=j) f[sdgzy][sdgzy]+=p[i]*p[j];
for(vector<int>::iterator x=G[i].begin();x!=G[i].end();++x) {
for(vector<int>::iterator y=G[j].begin();y!=G[j].end();++y) {
if(*x==*y) continue;
f[sdgzy][id[*x][*y]]+=k[*x]*k[*y];
}
}
for(vector<int>::iterator it=G[i].begin();it!=G[i].end();++it) {
if(*it==j) continue;
f[sdgzy][id[*it][j]]+=k[*it]*p[j];
}
for(vector<int>::iterator it=G[j].begin();it!=G[j].end();++it) {
if(*it==i) continue;
f[sdgzy][id[i][*it]]+=k[*it]*p[i];
}
}
}
}
double ans[N];
void gauss() {
int N=n*n;
for(int i=1;i<=N;++i) {
int mx=i;
for(int j=i+1;j<=N;++j)
if(f[j][i]>f[mx][i]&&f[j][i]!=0) mx=j;
if(mx!=i) swap(f[i],f[mx]);
for(int j=1;j<=N;++j) {
if(i==j) continue;
double p=f[j][i]/f[i][i];
for(int k=i;k<=N+1;k++) {
f[j][k]-=f[i][k]*p;
}
}
}
for(int i=1;i<=N;++i) f[i][i]=f[i][N+1]/f[i][i];
}
int main() {
n=read(),m=read();
a=read(),b=read();
for(int i=1;i<=m;++i) {
int x=read(),y=read();
G[x].push_back(y);
G[y].push_back(x);
ru[x]++;
ru[y]++;
}
for(int i=1;i<=n;++i) scanf("%lf",&p[i]);
for(int i=1;i<=n;++i) k[i]=(1.0-p[i])/ru[i];
for(int i=1,cnt=0;i<=n;++i)
for(int j=1;j<=n;++j)
id[i][j]=++cnt;
init();
gauss();
for(int i=1;i<=n;++i) printf("%.10lf ",f[id[i][i]][id[i][i]]);
return 0;
}

CF113D 高斯消元、dp的更多相关文章

  1. UVALive - 3490 Generator (AC自动机+高斯消元dp)

    初始有一个空串s,从前n个大写字母中不断随机取出一个字母添加到s的结尾,出现模式串t时停止,求停止时s的长度期望. 这道题解法不唯一,比较无脑的方法是对模式串t建一个单串AC自动机,设u为自动机上的一 ...

  2. bzoj 2337 [HNOI2011]XOR和路径【高斯消元+dp】

    首先,我们发现,因为是无向图,所以相连的点之间是有"依赖性"的,所以不能直接用dp求解. 因为是xor,所以按位处理,于是列线性方程组,设$ x[i] $为点i到n异或和为1的期望 ...

  3. bzoj 3143 [Hnoi2013]游走【高斯消元+dp】

    参考:http://blog.csdn.net/vmurder/article/details/44542575 和2337有点像 设点u的经过期望(还是概率啊我也分不清,以下都分不清)为\( x[u ...

  4. 【概率DP/高斯消元】BZOJ 2337:[HNOI2011]XOR和路径

    2337: [HNOI2011]XOR和路径 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 682  Solved: 384[Submit][Stat ...

  5. 2014多校第一场J题 || HDU 4870 Rating(DP || 高斯消元)

    题目链接 题意 :小女孩注册了两个比赛的帐号,初始分值都为0,每做一次比赛如果排名在前两百名,rating涨50,否则降100,告诉你她每次比赛在前两百名的概率p,如果她每次做题都用两个账号中分数低的 ...

  6. 【高斯消元】兼 【期望dp】例题

    [总览] 高斯消元基本思想是将方程式的系数和常数化为矩阵,通过将矩阵通过行变换成为阶梯状(三角形),然后从小往上逐一求解. 如:$3X_1 + 2X_2 + 1X_3 = 3$ $           ...

  7. BZOJ 3640: JC的小苹果 [概率DP 高斯消元 矩阵求逆]

    3640: JC的小苹果 题意:求1到n点权和\(\le k\)的概率 sengxian orz的题解好详细啊 容易想到\(f[i][j]\)表示走到i点权为j的概率 按点权分层,可以DP 但是对于\ ...

  8. BZOJ 2337: [HNOI2011]XOR和路径 [高斯消元 概率DP]

    2337: [HNOI2011]XOR和路径 题意:一个边权无向连通图,每次等概率走向相连的点,求1到n的边权期望异或和 这道题和之前做过的高斯消元解方程组DP的题目不一样的是要求期望异或和,期望之间 ...

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

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

随机推荐

  1. 关于oracle中的数字类型

    1.关于number类型. 以下是从其文档中摘录出的一句话: p is the precision, or the total number of significant decimal digits ...

  2. Beta冲刺阶段3.0

    1. 提供当天站立式会议照片一张 2. 每个人的工作 (有work item 的ID) 成员 昨天已完成的工作 今天计划完成的工作 工作中遇到的困难 具体贡献 郑晓丽 完成"我的活动&quo ...

  3. Python全栈-day1-day2-计算机基础

    计算机基础 1.编程语言 语言即事物之间沟通的介质,编程语言即程序员与计算机沟通的介质.程序员通过编写计算机程序使得计算机能够按照人预先的期望执行相应的动作,从而达到在某种程度上解放人和实现人类难以实 ...

  4. keras可视化pydot graphviz问题

    Keras中提供了一个神经网络可视化的函数plot,并可以将可视化结果保存在本地.plot使用方法如下: from keras.utils.visualize_util import plot plo ...

  5. Java集合-----Set详解

    Set是没有重复元素的集合,是无序的 1.HashSet HashSet它是线程不安全的       HashSet常用方法:   add(E element)  将指定的元素添加到此集合(如果尚未存 ...

  6. 【2017-2-20】C#运算符

    运算符分类: 1.算术运算符 ⑴+ - * / %(取余,模) /3; Console.Write(d); Console.ReadLine(); 则输出结果为“3”,因为10和3都是int型,dec ...

  7. win10安装mongodb-win32-x86_64-2008plus-ssl-3.4.10-signed

    1.下载mongodb在windows下的安装文件 首先去官网https://www.mongodb.com/download-center?jmp=nav#community下载安装文件.mongo ...

  8. 运用kNN算法识别潜在续费商家

    背景与目标 Youzan 是一家SAAS公司,服务于数百万商家,帮助互联网时代的生意人私有化顾客资产.拓展互联网客群.提高经营效率.现在,该公司希望能够从商家的交易数据中,挖掘出有强烈续费倾向的商家, ...

  9. python安装cv2

    pip install opencv-python

  10. c# 使用checked和unchecked

    首先要知道int型在c#中是一个32位的数.由此可以知道int型的取值范围是(-2147483648~2147483647)当要使用int的最小值或者是最大值的时候,可以使用int.MinValue和 ...