bzoj3270博物馆——期望概率DP
题目: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的更多相关文章
- BZOJ3270: 博物馆【概率DP】【高斯消元】
Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博物馆.这座博物馆有着特别的样式.它包含由m条走廊连接的n间房间,并且满足可以从任何一 ...
- BZOJ3270 博物館 概率DP 高斯消元
BZOJ3270 博物館 概率DP 高斯消元 @(XSY)[概率DP, 高斯消元] Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博 ...
- HDU 3853 期望概率DP
期望概率DP简单题 从[1,1]点走到[r,c]点,每走一步的代价为2 给出每一个点走相邻位置的概率,共3中方向,不动: [x,y]->[x][y]=p[x][y][0] , 右移:[x][y ...
- 【BZOJ 3652】大新闻 数位dp+期望概率dp
并不难,只是和期望概率dp结合了一下.稍作推断就可以发现加密与不加密是两个互相独立的问题,这个时候我们分开算就好了.对于加密,我们按位统计和就好了;对于不加密,我们先假设所有数都找到了他能找到的最好的 ...
- 【BZOJ 3811】玛里苟斯 大力观察+期望概率dp+线性基
大力观察:I.从输出精准位数的约束来观察,一定会有猫腻,然后仔细想一想,就会发现输出的时候小数点后面不是.5就是没有 II.从最后答案小于2^63可以看出当k大于等于3的时候就可以直接搜索了 期望概率 ...
- 【NOIP模拟赛】黑红树 期望概率dp
这是一道比较水的期望概率dp但是考场想歪了.......我们可以发现奇数一定是不能掉下来的,因为若奇数掉下来那么上一次偶数一定不会好好待着,那么我们考虑,一个点掉下来一定是有h/2-1个红(黑),h/ ...
- BZOJ1415: [Noi2005]聪聪和可可 最短路 期望概率dp
首先这道题让我回忆了一下最短路算法,所以我在此做一个总结: 带权: Floyed:O(n3) SPFA:O(n+m),这是平均复杂度实际上为O(玄学) Dijkstra:O(n+2m),堆优化以后 因 ...
- 期望概率DP
期望概率DP 1419: Red is good Description 桌面上有\(R\)张红牌和\(B\)张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付 ...
- UVa 11427 Expect the Expected (数学期望 + 概率DP)
题意:某个人每天晚上都玩游戏,如果第一次就䊨了就高兴的去睡觉了,否则就继续直到赢的局数的比例严格大于 p,并且他每局获胜的概率也是 p,但是你最玩 n 局,但是如果比例一直超不过 p 的话,你将不高兴 ...
随机推荐
- FFT/NTT模板 既 HDU1402 A * B Problem Plus
@(学习笔记)[FFT, NTT] Problem Description Calculate A * B. Input Each line will contain two integers A a ...
- 什么场景应该用 MongoDB ?
摘要: 月初在云栖社区上发起了一个 MongoDB 使用场景及运维管理问题交流探讨 的技术话题,有近5000人关注了该话题讨论,这里就 MongoDB 的使用场景做个简单的总结,谈谈什么场景该用 Mo ...
- 老大写得一个非常高大上的Makefile,包括非常多语法:
一个非常高大上的Makefile,包括非常多语法: TARGET = api-login INSTALL_PATH = /huishoubao/cgi include ../../implements ...
- binary-tree-preorder-traversal——前序遍历
Given a binary tree, return the preorder traversal of its nodes' values. For example:Given binary tr ...
- mysql 安装与配置、使用
http://www.cnblogs.com/shenliang123/p/3203546.html CentOs中mysql的安装与配置 在linux中安装数据库首选MySQL,Mysql数据库的第 ...
- ios系统铃声调用方法
首先,这里我要说明这里并非真正调用系统内部自带的铃声,由于苹果是不同意开发人员调用的,没有给开发人员接口.假设调用了就无法上线的! 那为什么AppStore里面还有那么多app显示的效果是调用系统的铃 ...
- Effective C++ 条款三 尽可能使用const
参考资料:http://blog.csdn.net/bizhu12/article/details/6672723 const的常用用法小结 1.用于定义常量变量,这样这个变量在后面就不可以 ...
- HDU 2108 Shape of HDU (判断是不是凸多边形 叉乘)
Shape of HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- 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 ...
- 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 ...