题目链接

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. Mysql版本java问题(com.mysql.cj.jdbc.Driver和com.mysql.jdbc.Driver)

    老版本com.mysql.jdbc.Driver已弃用 String url1 = "jabc:mysql://127.0.0.1:3306/test"; String url1 ...

  2. kail linux arp欺骗

    首先连接wifi,进入内网 1,查看内网的存活主机  命令  fping -asg 192.168.1.0/24    (视不同环境而定,假设这里的路由器地址为 192.168.1.1) 也可利用其他 ...

  3. html5 手机端 通讯录 touch 效果

    不说那么多直接上代码. <html> <head> <meta http-equiv="Content-Type" content="tex ...

  4. GBDT:梯度提升决策树

    http://www.jianshu.com/p/005a4e6ac775 综述   GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Ad ...

  5. Gambler Bo (高斯消元求特解)

    对于图中的每一个点假设点击Xi * m + j 然后每个点都有那么对于每一个点可以列举出一个方程式,n*m个点解n*m个未知数.利用高斯消元就可以解决. 问题就在这个题目可能不止有一个特,所以我们需要 ...

  6. 【2017-03-20】HTML框架,标题栏插入小图标,锚点,插入音频视频,滚动效果

    一.html框架   iframe 在网页中嵌入一个别的网页 1.格式: <iframe  src="链接地址" width="" height=&quo ...

  7. Linux Firewall 开启与关闭 以及sudo 设置

    Linux 系统下,普通用户经常需要使用root 用户的权限,所以要经常切换到root用户,比较麻烦,因此可以给普通用户添加root 权限,需要在常规命令前面加上sudo 切换到root vi  /e ...

  8. Log4j基础知识

    Log4J是Apache的一个开放源代码的项目.通过使用Log4J,程序员可以控制日志信息输送的目的地,包括控制台,文件,GUI组件和NT事件记录器,也可以控制每一条日志的输出格式,或通过定义每一条日 ...

  9. 初探AngularJs框架(一)

    一.需要准备的环境 Nodejs:https://nodejs.org/en/download/ Python:https://www.python.org/downloads/release/pyt ...

  10. Linux基础命令---防火墙iptables

    iptables iptables指令用来设置Linux内核的ip过滤规则以及管理nat功能.iptables用于在Linux内核中设置.维护和检查IPv4数据包过滤规则表.可以定义几个不同的表.每个 ...