题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3270

设计一个状态表示两个人分别在两个点的状态,带个标号num[i][j];

据此得到状态之间转移的关系所构成的n元方程,高斯消元求解;

要注意起点的概率要+1,而且开始时两个人在两个点是有区分的,所以不能(A,B)和(B,A)都加;

用scanf会CE,所以改成了快读和cin;

调了一天的才找到错误竟然是把d数组和deg数组弄混了!

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int n,m,A,B,deg[],ct,head[],cnt;
double d[],a[][],p[];
struct N{
int to,next;
N(int t=,int n=):to(t),next(n) {}
}edge[];
int num(int a,int b){return n*(a-)+b;}
void gauss()
{
for(int x=;x<=cnt;x++)
{
int nw=x;
for(int y=x+;y<=cnt;y++)
if(fabs(a[y][x])>fabs(a[nw][x]))nw=y;
if(nw!=x)
for(int k=x;k<=cnt+;k++)swap(a[nw][k],a[x][k]);
for(int y=x+;y<=cnt;y++)
{
double r=a[y][x]/a[x][x];
for(int t=cnt+;t>=x;t--)//
a[y][t]-=r*a[x][t];
}
}
for(int i=cnt;i;i--)
{
for(int j=i+;j<=cnt;j++)
a[i][cnt+]-=a[i][j]*d[j];
d[i]=a[i][cnt+]/a[i][i];
}
}
int rd()
{
char ch=getchar();int x=,f=;
while(ch<''||ch>'')
{
if(ch=='-')f=-;
ch=getchar();
}
while(ch>=''&&ch<='')x=x*+ch-'',ch=getchar();
return x*f;
}
int main()
{
// scanf("%d%d%d%d",&n,&m,&A,&B);
n=rd();m=rd();A=rd();B=rd();
for(int i=,x,y;i<=m;i++)
{
// scanf("%d%d",&x,&y);
x=rd();y=rd();
deg[x]++,deg[y]++;
edge[++ct]=N(y,head[x]);head[x]=ct;
if(x==y)continue;
edge[++ct]=N(x,head[y]);head[y]=ct;
}
for(int i=;i<=n;i++)
// scanf("%lf",&p[i]);
cin>>p[i];
cnt=n*n;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++) if(i!=j)
{
int x=num(i,j);
for(int k=head[i];k;k=edge[k].next)
{
for(int l=head[j];l;l=edge[l].next)
{
a[num(edge[k].to,edge[l].to)][x]+=(1.0-p[i])*(1.0-p[j])/deg[i]/deg[j];
// a[num(i,edge[l].to)][x]+=(1.0-p[j])*p[i]/d[j];//重复
}
a[num(edge[k].to,j)][x]+=(1.0-p[i])*p[j]/deg[i];
}
for(int l=head[j];l;l=edge[l].next)a[num(i,edge[l].to)][x]+=(1.0-p[j])*p[i]/deg[j];
a[x][x]+=p[i]*p[j];
}
for(int i=;i<=cnt;i++)a[i][i]-=1.0;
a[num(A,B)][cnt+]-=1.0;
// printf("a[%d]=%.2lf\n",num(A,B),a[num(A,B)][cnt+1]);
// a[num(B,A)][cnt+1]-=1.0;//两人有区分!
gauss();
for(int i=;i<=n;i++)
printf("%.6lf ",d[num(i,i)]);
return ;
}

bzoj3270博物馆——期望概率DP的更多相关文章

  1. BZOJ3270: 博物馆【概率DP】【高斯消元】

    Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博物馆.这座博物馆有着特别的样式.它包含由m条走廊连接的n间房间,并且满足可以从任何一 ...

  2. BZOJ3270 博物館 概率DP 高斯消元

    BZOJ3270 博物館 概率DP 高斯消元 @(XSY)[概率DP, 高斯消元] Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博 ...

  3. HDU 3853 期望概率DP

    期望概率DP简单题 从[1,1]点走到[r,c]点,每走一步的代价为2 给出每一个点走相邻位置的概率,共3中方向,不动: [x,y]->[x][y]=p[x][y][0] ,  右移:[x][y ...

  4. 【BZOJ 3652】大新闻 数位dp+期望概率dp

    并不难,只是和期望概率dp结合了一下.稍作推断就可以发现加密与不加密是两个互相独立的问题,这个时候我们分开算就好了.对于加密,我们按位统计和就好了;对于不加密,我们先假设所有数都找到了他能找到的最好的 ...

  5. 【BZOJ 3811】玛里苟斯 大力观察+期望概率dp+线性基

    大力观察:I.从输出精准位数的约束来观察,一定会有猫腻,然后仔细想一想,就会发现输出的时候小数点后面不是.5就是没有 II.从最后答案小于2^63可以看出当k大于等于3的时候就可以直接搜索了 期望概率 ...

  6. 【NOIP模拟赛】黑红树 期望概率dp

    这是一道比较水的期望概率dp但是考场想歪了.......我们可以发现奇数一定是不能掉下来的,因为若奇数掉下来那么上一次偶数一定不会好好待着,那么我们考虑,一个点掉下来一定是有h/2-1个红(黑),h/ ...

  7. BZOJ1415: [Noi2005]聪聪和可可 最短路 期望概率dp

    首先这道题让我回忆了一下最短路算法,所以我在此做一个总结: 带权: Floyed:O(n3) SPFA:O(n+m),这是平均复杂度实际上为O(玄学) Dijkstra:O(n+2m),堆优化以后 因 ...

  8. 期望概率DP

    期望概率DP 1419: Red is good ​ Description ​ 桌面上有\(R\)张红牌和\(B\)张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付 ...

  9. UVa 11427 Expect the Expected (数学期望 + 概率DP)

    题意:某个人每天晚上都玩游戏,如果第一次就䊨了就高兴的去睡觉了,否则就继续直到赢的局数的比例严格大于 p,并且他每局获胜的概率也是 p,但是你最玩 n 局,但是如果比例一直超不过 p 的话,你将不高兴 ...

随机推荐

  1. 洛谷—— P1051 谁拿了最多奖学金

    https://www.luogu.org/problem/show?pid=1051 题目描述 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: 1) 院士奖 ...

  2. T2602 最短路径问题 codevs

    http://codevs.cn/problem/2602/ 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold   题目描述 Description 平面上有n个点(n& ...

  3. [转]Visual Studio 2012 编译错误【error C4996: 'scanf': This function or variable may be unsafe. 】的解决方案

    原文地址:http://www.cnblogs.com/gb2013/archive/2013/03/05/SecurityEnhancementsInTheCRT.html 在VS 2012 中编译 ...

  4. linux的主分区与逻辑分区的关系

     主分区和扩展分区的差别在于主分区位于硬盘的最開始.MBR 扇区的位置.这个位置的数据在计算机启动时.会自己主动被 BIOS 读取而且运行,也就是说这个位置的分区表会自己主动被 BIOS 读取到内 ...

  5. Android——坐标系及转化

    一.坐标系 Android应用层坐标系原点在左上角,坐标范围(0,0)——(width,height). Android底层坐标系原点在屏幕中央,坐标范围(-1000,,1000)——(1000,10 ...

  6. 双向队列(STL做法)

    双向队列 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 想想双向链表--双向队列的定义差点儿相同,也就是说一个队列的队尾同一 ...

  7. [java][db]JAVA分布式事务原理及应用

    JTA(Java Transaction API)同意应用程序运行分布式事务处理--在两个或多个网络计算机资源上訪问而且更新数据.JDBC驱动程序的JTA支持极大地增强了数据訪问能力.  本文的目的是 ...

  8. SpringBoot学习之文件结构和配置文件

    Springboot文件结构和配置文件 转载:http://www.zslin.com/web/article/detail/11 项目文件结构 新建的Springboot项目的文件结构如下: |-c ...

  9. FastDFS的配置、部署与API使用解读(3)以流的方式上传文件的客户端代码(转)

    调用的API为: String[] upload_file( String group_name,//组名,不指定则可设为null long file_size,//文件大小,必须制定 UploadC ...

  10. Spark Streaming性能优化系列-怎样获得和持续使用足够的集群计算资源?

    一:数据峰值的巨大影响 1. 数据确实不稳定,比如晚上的时候訪问流量特别大 2. 在处理的时候比如GC的时候耽误时间会产生delay延迟 二:Backpressure:数据的反压机制 基本思想:依据上 ...