设$f[x][y]$表示从x和y出发相遇的期望长度,则$f[x][x]=0$,且$f[x][y]$对称,共$C(n,2)$个未知量。

列出方程组$G$,得到$G\times F=B$。

高斯消元求出$G$的逆矩阵$G'$,则$F=G'\times B$,对于每个询问代入计算即可。

时间复杂度$O(n^6+tn^4)$。

#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=235;
int n,m,T,i,j,k,x,y,o,id[25][25],cnt,d[25],e[25][25];
double p[25],f[N][N],g[N][N],B[N][N],len[N],t,ans;
int main(){
scanf("%d%d%d",&n,&m,&T);
for(i=1;i<=n;i++)for(j=1;j<=n;j++)e[i][j]=-1;
for(i=1;i<=n;i++)e[i][i]=0;
for(i=1;i<=m;i++){
scanf("%d%d",&x,&y);
d[x]++,d[y]++;
e[x][y]=e[y][x]=i;
}
for(i=1;i<=n;i++)scanf("%lf",&p[i]);
for(i=1;i<=n;i++)for(j=i+1;j<=n;j++)id[i][j]=++cnt;
for(i=1;i<=n;i++)for(j=i+1;j<=n;j++){
o=id[i][j];
f[o][o]=1;
for(x=1;x<=n;x++)if(~e[i][x])for(y=1;y<=n;y++)if(~e[j][y]){
t=1;
if(x==i)t*=p[i];else t*=(1.0-p[i])/d[i];
if(y==j)t*=p[j];else t*=(1.0-p[j])/d[j];
B[o][e[i][x]]+=t;
B[o][e[j][y]]+=t;
if(x!=y)f[o][x<y?id[x][y]:id[y][x]]-=t;
}
}
for(i=1;i<=cnt;i++)g[i][i]=1;
for(i=1;i<=cnt;i++){
for(k=i,j=i+1;j<=cnt;j++)if(fabs(f[j][i])>fabs(f[k][i]))k=j;
if(k!=i)for(j=1;j<=cnt;j++)swap(f[i][j],f[k][j]),swap(g[i][j],g[k][j]);
for(j=i+1;j<=cnt;j++)for(t=f[j][i]/f[i][i],k=1;k<=cnt;k++)f[j][k]-=f[i][k]*t,g[j][k]-=g[i][k]*t;
}
for(i=cnt;i;i--){
for(j=cnt;j>i;j--)for(t=f[i][j],k=1;k<=cnt;k++)f[i][k]-=f[j][k]*t,g[i][k]-=g[j][k]*t;
for(t=f[i][i],j=1;j<=cnt;j++)f[i][j]/=t,g[i][j]/=t;
}
while(T--){
for(i=1;i<=m;i++)scanf("%lf",&len[i]);
scanf("%d%d",&x,&y);
if(x==y){puts("0.00");continue;}
o=x<y?id[x][y]:id[y][x];
ans=0;
for(i=1;i<=cnt;i++)for(j=1;j<=m;j++)ans+=g[o][i]*B[i][j]*len[j];
printf("%.2f\n",ans);
}
return 0;
}

  

BZOJ3253 : 改编的更多相关文章

  1. 【转】监听按钮除OnClick外其他事件的方法,附简易改编的UIButton类

    http://lib.csdn.net/article/unity3d/38463 作者:IceFantasyLcj 大家好,我是雨中祈雨.一直以来,CSDN都是我最好的编程助手.这是我在CSDN的第 ...

  2. 【转】 NGUI 监听按钮除OnClick外其他事件的方法,附简易改编的UIButton类

    http://blog.csdn.net/icefantasylcj/article/details/49450555 大家好,我是雨中祈雨.一直以来,CSDN都是我最好的编程助手.这是我在CSDN的 ...

  3. NOIP2014无线网络发射器选址改编1

    问题描述 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129条东西向街道和129条南北向街道所形成的网格状,并且相邻的平 ...

  4. APK改之理 手游修改改编安卓程序工具安装使用教程

    APK改之理 手游修改改编安卓程序工具安装使用教程 --APK破解付费程序 apk改之理是pc平台上一款非常好用的apk反编译工具,他将反编译以及签名等功能集中在一起,并且拥有非常人性化的操作界面,如 ...

  5. C语言 · 8皇后问题改编

    8皇后问题(改编) 问题描述 规则同8皇后问题,但是棋盘上每格都有一个数字,要求八皇后所在格子数字之和最大. 输入格式 一个8*8的棋盘. 输出格式 所能得到的最大数字和 样例输入 1 2 3 4 5 ...

  6. 2017Facebook面试题改编“一面砖墙 ”

    题目:一面砖墙 这道题改编自网上Facebook去年的一道面试题,是hihoCoder的1494题(https://hihocoder.com/problemset/problem/1494) 这道题 ...

  7. Atcoder Regular Contest 092 A 的改编

    原题地址 题目大意 给定平面上的 $n$ 个点 $p_1, \dots, p_n$ .第 $i$ 点的坐标为 $(x_i, y_i)$ .$x_i$ 各不相同,$y_i$ 也各不相同.若两点 $p_i ...

  8. Cocos2d-x 3.1 一步一步地做改编

    本文并不想谈论的屏幕改编或真理的概念.假设不知道cocos2d-x的,请先看这篇文章:http://www.cocoachina.com/gamedev/cocos/2014/0516/8451.ht ...

  9. C++ ABI之名字改编(以Qt为例)

    在C++中,由于重载等技术的存在,编译器要将函数.结构体.类等等的信息传递给链接器,就不能像C语言那样简单地通过函数名来完成,它需要提供额外的参数信息,而还要和C语言共用链接器,这就需要用到名字改编( ...

随机推荐

  1. 远程桌面管理工具Remote Desktop Connection Manager

    使用说明:RDCMan安装好后双击打开RDCMan.exe,首次使用需要添加配置文件扩展名为rdg 1.点击File新建配置文件,这里命名为MRU,存放在安装的根路径下 建好之后,MRU会显示在左侧菜 ...

  2. hadoop集群运行jps命令以后Datanode节点未启动的解决办法

    出现该问题的原因:在第一次格式化dfs后,启动并使用了hadoop,后来又重新执行了格式化命令(hdfs namenode -format),这时namenode的clusterID会重新生成,而da ...

  3. Oracle Client(客户端) 安装与配置

    因为工作需要,需要通过本地oracle客户端将数据导入到远程服务器上的oracle数据库中.从csdn下了很多oracle客户端,都是属于精简版,缺少imp.exe文件,造成无法导入数据.所以最终从o ...

  4. JSP基础知识➣Cookie和Session(五)

    JSP Cookie 处理 Cookie是存储在客户机的文本文件,它们保存了大量轨迹信息.在servlet技术基础上,JSP显然能够提供对HTTP cookie的支持.JSP脚本通过request对象 ...

  5. php把一些预定义的 HTML 实体转换为字符。

    htmlspecialchars_decode() echo htmlspecialchars_decode($condition,ENT_QUOTES) '  会被转成 单引号

  6. SQL Server数据库存储过程中拼接字符串注意的问题

    在SQL Server数据库中书写复杂的存储过程时,一般的做法是拼接字符串,最后使用EXEC sp_executesql '拼接的字符串' 查询出结果. 先看一段代码: -- ============ ...

  7. mongodb输错命令后不能删除问题

    在用crt连接Linux操作MongoDB时,命令输错了,想删除的时候,却删除不了,原因是crt的配置有问题,解决办法如下 第一步:选项-->会话选项

  8. PAT (Basic Level) Practise - 害死人不偿命的(3n+1)猜想

    题目链接:https://www.patest.cn/contests/pat-b-practise/1001 卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果 ...

  9. day63 django-模板语言

    我们的功能是需要解耦的,从开始就一直在强调这一点,所以我们的函数需要另外放到一个单独的文件里面,一般都是放到views文件里面,views叫做视图,一般术语叫做视图函数,用来进行各种逻辑判断的,需要一 ...

  10. day8数据类型补充,集合,深浅拷贝

    思维导图: 集合的补充:下面的思维导图有一个点搞错了,在这里纠正一下,没有合集,是反交集,^这个是反差集的意思 . 交集&,反交集^,差集-,并集|,然后就是子集和超集 数据类型补充: ''' ...