题目: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. FFT/NTT模板 既 HDU1402 A * B Problem Plus

    @(学习笔记)[FFT, NTT] Problem Description Calculate A * B. Input Each line will contain two integers A a ...

  2. 什么场景应该用 MongoDB ?

    摘要: 月初在云栖社区上发起了一个 MongoDB 使用场景及运维管理问题交流探讨 的技术话题,有近5000人关注了该话题讨论,这里就 MongoDB 的使用场景做个简单的总结,谈谈什么场景该用 Mo ...

  3. 老大写得一个非常高大上的Makefile,包括非常多语法:

    一个非常高大上的Makefile,包括非常多语法: TARGET = api-login INSTALL_PATH = /huishoubao/cgi include ../../implements ...

  4. binary-tree-preorder-traversal——前序遍历

    Given a binary tree, return the preorder traversal of its nodes' values. For example:Given binary tr ...

  5. mysql 安装与配置、使用

    http://www.cnblogs.com/shenliang123/p/3203546.html CentOs中mysql的安装与配置 在linux中安装数据库首选MySQL,Mysql数据库的第 ...

  6. ios系统铃声调用方法

    首先,这里我要说明这里并非真正调用系统内部自带的铃声,由于苹果是不同意开发人员调用的,没有给开发人员接口.假设调用了就无法上线的! 那为什么AppStore里面还有那么多app显示的效果是调用系统的铃 ...

  7. Effective C++ 条款三 尽可能使用const

    参考资料:http://blog.csdn.net/bizhu12/article/details/6672723      const的常用用法小结 1.用于定义常量变量,这样这个变量在后面就不可以 ...

  8. HDU 2108 Shape of HDU (判断是不是凸多边形 叉乘)

    Shape of HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  9. scrollTo(String text) and scrollToExact(String text) method of Android Driver not working

    Using the scrollTo(String text) and scrollToExact(String text) method of Android Driver. However the ...

  10. Testng 运行报错:"Total tests run: 0, Failures: 0, Skips: 0"以及找不到class文件的问题

    "Total tests run: 0, Failures: 0, Skips: 0" This means that there were no tests executed a ...