CF113D 高斯消元、dp
题目链接
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的更多相关文章
- UVALive - 3490 Generator (AC自动机+高斯消元dp)
初始有一个空串s,从前n个大写字母中不断随机取出一个字母添加到s的结尾,出现模式串t时停止,求停止时s的长度期望. 这道题解法不唯一,比较无脑的方法是对模式串t建一个单串AC自动机,设u为自动机上的一 ...
- bzoj 2337 [HNOI2011]XOR和路径【高斯消元+dp】
首先,我们发现,因为是无向图,所以相连的点之间是有"依赖性"的,所以不能直接用dp求解. 因为是xor,所以按位处理,于是列线性方程组,设$ x[i] $为点i到n异或和为1的期望 ...
- bzoj 3143 [Hnoi2013]游走【高斯消元+dp】
参考:http://blog.csdn.net/vmurder/article/details/44542575 和2337有点像 设点u的经过期望(还是概率啊我也分不清,以下都分不清)为\( x[u ...
- 【概率DP/高斯消元】BZOJ 2337:[HNOI2011]XOR和路径
2337: [HNOI2011]XOR和路径 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 682 Solved: 384[Submit][Stat ...
- 2014多校第一场J题 || HDU 4870 Rating(DP || 高斯消元)
题目链接 题意 :小女孩注册了两个比赛的帐号,初始分值都为0,每做一次比赛如果排名在前两百名,rating涨50,否则降100,告诉你她每次比赛在前两百名的概率p,如果她每次做题都用两个账号中分数低的 ...
- 【高斯消元】兼 【期望dp】例题
[总览] 高斯消元基本思想是将方程式的系数和常数化为矩阵,通过将矩阵通过行变换成为阶梯状(三角形),然后从小往上逐一求解. 如:$3X_1 + 2X_2 + 1X_3 = 3$ $ ...
- BZOJ 3640: JC的小苹果 [概率DP 高斯消元 矩阵求逆]
3640: JC的小苹果 题意:求1到n点权和\(\le k\)的概率 sengxian orz的题解好详细啊 容易想到\(f[i][j]\)表示走到i点权为j的概率 按点权分层,可以DP 但是对于\ ...
- BZOJ 2337: [HNOI2011]XOR和路径 [高斯消元 概率DP]
2337: [HNOI2011]XOR和路径 题意:一个边权无向连通图,每次等概率走向相连的点,求1到n的边权期望异或和 这道题和之前做过的高斯消元解方程组DP的题目不一样的是要求期望异或和,期望之间 ...
- BZOJ 3270: 博物馆 [概率DP 高斯消元]
http://www.lydsy.com/JudgeOnline/problem.php?id=3270 题意:一张无向图,一开始两人分别在$x$和$y$,每一分钟在点$i$不走的概率为$p[i]$, ...
随机推荐
- rabbitmq坑点与异常处理
from:http://www.cnblogs.com/gossip/p/4573056.html 一.None of the specified endpoints were reachable 这 ...
- CentOS中无法使用setup命令 -bash:setup: command not found
出现这个问题是因为 Minimal 安装模式 所以并没有安装 setuptool 软件. 解决办法为: 使用yum 源直接下载安装 或者 去下载 setuptool 软件包安装 #安装setuptoo ...
- Android -- 自定义ViewGroup实现FlowLayout效果
1,在开发的时候,常在我们的需求中会有这种效果,添加一个商品的一些热门标签,效果图如下: 2,从上面效果可以看得出来,这是一个自定义的ViewGroup,然后实现换行效果,让我们一起来实现一下 自定义 ...
- [ Learning ] Spring Resources
1. Spring MVC Spring MVC原理及配置详解 springMVC系列之(三) spring+springMVC集成(annotation方式) Mybatis3+Spring4+Sp ...
- Rpgmakermv(12) gacha插件系列
很有趣的插件,可以做扭蛋啦,抽奖啦之类的东西.... 简单的示范: a.开始抽奖画面: b.抽奖中 c.随机得到物品 d.查看收集图鉴 e.图鉴内容 1.gacha 作用: get the item ...
- E. Kefa and Watch hash 线段树
2015-09-28 14:11:36 by opas 这题给的是一个字符串 把其中一些子串给取出来 判断是否是周期为d的字符串 还需要把 其中的一个区间完全变成一个数 ,然后在查询,我们把每个字符 ...
- 即时通信系统中实现聊天消息加密,让通信更安全【低调赠送:C#开源即时通讯系统(支持广域网)——GGTalk4.5 最新源码】
在即时通讯系统(IM)中,加密重要的通信消息,是一个常见的需求.尤其在一些政府部门的即时通信软件中(如税务系统),对即时聊天消息进行加密是非常重要的一个功能,因为谈话中可能会涉及到机密的数据.我在最新 ...
- skynet对Windows环境支持的版本:Windows版skynet
https://github.com/sanikoyes/skynet.git Skynet Skynet is a lightweight online game framework, and it ...
- Linux服务器---邮件服务spam
安装spam spam(SpamAssassin)利用perl来进行文字分析,他会检测邮件的标题.内容.送信人,这样就可以过滤出垃圾邮件 1.安装spam.由于spam的依赖太多,用户一定要使用yum ...
- calendar 模块
calendar模块,即日历模块,提供了对日期的一些操作方法,和生成日历的方法 注:星期一是默认的每周第一天,星期天是默认的最后一天.更改设置需调用calendar.setfirstweekday() ...