题目链接

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. C# Mongo Client 2.4.2判断是否存在表

    public async Task<bool> CollectionExistsAsync(string collectionName) { var filter = new BsonDo ...

  2. 《大话设计模式》c++实现 状态模式

    状态模式包含如下角色: Context: 环境类 State: 抽象状态类 ConcreteState: 具体状态类 2)适用场景: a)状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂 ...

  3. Redis Cluster(集群)的搭建

    一.Redis的下载.安装.启动(单实例) 我们统一将Redis安装在/opt目录下,执行命令如下: $ cd /opt $ wget http://download.redis.io/release ...

  4. plsql注册-转

    注册码:Product Code:4t46t6vydkvsxekkvf3fjnpzy5wbuhphqzserial Number:601769 password:xs374ca https://blo ...

  5. maven项目没有src/test/java和src/test/resources目录问题解决

    新建maven项目,如下图示: 只有src/main/java和src/main/resources两个目录,而没有src/test/java和src/test/resources,于是第一反应是没有 ...

  6. (Review cs231n) Backpropagation and Neural Network

    损失由两部分组成: 数据损失+正则化损失(data loss + regularization) 想得到损失函数关于权值矩阵W的梯度表达式,然后进性优化操作(损失相当于海拔,你在山上的位置相当于W,你 ...

  7. Linux基础命令---traceroute追踪路由

    traceroute       traceroute指令输出到目标主机的路由包.Traceroute跟踪从IP网络到给定主机的路由数据包.它利用IP协议的生存时间(TTL)字段,并试图在通往主机的路 ...

  8. HTTPS实战之单向验证和双向验证

    转载自:https://mp.weixin.qq.com/s/UiGEzXoCn3F66NRz_T9crA 原创: 涛哥 coding涛 6月9日 作者对https 解释的入目三分啊 (全文太长,太懒 ...

  9. HDU 2175 汉诺塔IX (递推)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2175 1,2,...,n表示n个盘子.数字大盘子就大.n个盘子放在第1根柱子上.大盘不能放在小盘上.  ...

  10. bzoj4443 小凸玩矩阵

    题目链接 二分+最大check #include<algorithm> #include<iostream> #include<cstdlib> #include& ...