传送门

Solution

设一个状态为 \((x,y)\) 表示两人在的位置,求出每个状态期望出现的次数

设一个状态为 \(u\) , \(x_u^0=[u==(a,b)]\)

所以一个状态出现的次数期望为 \(E_u=x_u^0+\sum_vG(v,u)\times E_v\)

其中\(G\)是状态转移的概率矩阵

高消即可,复杂度 \(O(n^6)\)

Code 

#include<bits/stdc++.h>
#define ll long long
#define db double
#define dbg1(x) cerr<<#x<<"="<<(x)<<" "
#define dbg2(x) cerr<<#x<<"="<<(x)<<"\n"
#define dbg3(x) cerr<<#x<<"\n"
using namespace std;
#define reg register
inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
return x*f;
}
const int MN=23;bool A[MN][MN];
int I[MN][MN],N,M,a,b,deg[MN];
db B[MN*MN][MN*MN],F[MN*MN],P[MN];
void Gauss(int n)
{
reg int i,j,k;
for(i=1;i<=n;++i)
{
int p=i;
for(j=i+1;j<=n;++j)if(fabs(B[j][i])>fabs(B[p][i]))p=j;
if(i!=p)swap(B[i],B[p]);
for(j=i+1;j<=n;++j)
{
db d=B[j][i]/B[i][i];
for(k=i;k<=n+1;++k) B[j][k]-=d*B[i][k];
}
}
for(i=n;i;--i)
{
for(j=i+1;j<=n;++j)B[i][n+1]-=F[j]*B[i][j];
F[i]=B[i][n+1]/B[i][i];
}
}
db _(int x,int y){if(!A[x][y])return 0;if(x==y)return P[x];return (1.-P[x])/deg[x];}
int main()
{
reg int i,j,x,y;
N=read(),M=read();a=read(),b=read();
for(i=1;i<=M;++i) x=read(),y=read(),++deg[x],++deg[y],A[x][y]=A[y][x]=1;
for(i=1;i<=N;++i) A[i][i]=1,scanf("%lf",&P[i]);
for(i=1;i<=N;++i)for(j=1;j<=N;++j)I[i][j]=(i-1)*N+j;
B[I[a][b]][N*N+1]=-1.;
for(i=1;i<=N;++i)for(j=1;j<=N;++j)
{
B[I[i][j]][I[i][j]]+=-1.;
if(i!=j)for(x=1;x<=N;++x)for(y=1;y<=N;++y) B[I[x][y]][I[i][j]]+=_(i,x)*_(j,y);
}
Gauss(N*N);
for(i=1;i<=N;++i) printf("%.10lf ",F[I[i][i]]);
return 0;
}

Blog来自PaperCloud,未经允许,请勿转载,TKS!

最新文章

  1. Javascript高级程序设计——函数声明与函数表达式的区别
  2. Java 中的 request 和response 理解
  3. 迅美VPS安装和配置MySQL数据库教程
  4. Bone Collector II
  5. datatable把一个LIst的数据放入两个colum防止窜行的做法
  6. linux里的php使用phpize拓展各种功能(curl,zip,gd等等)
  7. 二叉树、栈、队列、链表的Java代码实现
  8. SpringCloud(7)服务链路追踪Spring Cloud Sleuth
  9. HDU 1556 BIT区间修改+单点查询(fread读入优化)
  10. linux --mariadb/redis数据库篇
  11. Fiddler抓包使用教程-基本功能介绍
  12. powerdesign、navacat、ER图、uml、类图、时序图
  13. 贪心算法: Codevs 1052 地鼠游戏
  14. Revit API得到类别Category设置类别可见性
  15. [AaronYang]C#人爱学不学[1]
  16. Synycovery 7.18f 一个优秀的同步软件
  17. GO_03:GO语言基础语法
  18. 八.linux系统文件属性知识
  19. go 语言学习 1
  20. nohu和&amp;

热门文章

  1. Spring Boot 中 10 行代码构建 RESTful 风格应用
  2. 基于 HTML5 换热站可视化应用
  3. 自己对Thread的一些看法;
  4. Flask基于websocket的简单聊天室
  5. 详解:Java字符串类型&quot;switch&quot;的底层原理
  6. vue底部导航的精准显示
  7. Caml 多表关联查询
  8. unity点击按钮弹出操作提示界面
  9. Linux的基本指令(2)-Linux从入门到精通第三天(非原创)
  10. 《linux就该这么学》课堂笔记14 Apache、SELinux、虚拟主机