博物馆 bzoj3270

首先最难想的是两个人要在同一时间,同一地点相遇,这样很难处理,所以用类似于聪聪和可可的方法,用f[i][j]表示A在i位置,B在j位置,那么f[i][j]的转移方法就有四个

1、两个人都在原地没动,则a[f[i][j]]+=a[f[i][j]]*p[i]*p[j];

2(3)、其中有一个人动,以A动为例 a[f[i][j]]+=p[j]*((1-p[v]).chu[v])*a[f[v][j]];

4、两人都动,类比2即可.

注意到f是一个矩阵,所以将其编号,之后用高斯消元,接触每一个f[i][i]的值,就是答案;

  1 #include<cmath>
  2 #include<cstdio>
  3 #include<cstdlib>
  4 #include<cstring>
  5 #include<iostream>
  6 #include<algorithm>
  7 using namespace std;
  8 struct Node{
  9     int u,v,nxt;
 10 }g[400];
 11 int n,m,A,B;
 12 int chu[25];
 13 int adj[400],e;
 14 int f[21][21];
 15 double p[25];
 16 double a[410][410];
 17 double ans[410];
 18 void add(int u,int v){
 19     g[++e].v=v; g[e].u=u;
 20     g[e].nxt=adj[u]; adj[u]=e;
 21 }
 22 void gs(){
 23     int N=n*n+1;
 24     int T=n*n;
 25     int h=1,num;
 26     for(int i=1;i<T;i++,h++){
 27         num=h;
 28         for(int j=h+1;j<=T;j++){
 29             if(fabs(a[j][i]) > fabs(a[num][i])) num=j;
 30         }
 31         if(num!=h){
 32             for(int j=i;j<=N;j++){
 33                 swap(a[h][j],a[num][j]);
 34             }
 35         }
 36         if(a[h][i]==0){
 37             h--;
 38             continue;
 39         }
 40         double ti;
 41         for(int j=h+1;j<=T;j++){
 42             if(a[j][i]==0) continue;
 43             ti=a[j][i]/a[h][i];
 44             for(int k=i;k<=N;k++){
 45                 a[j][k]-=a[h][k]*ti;
 46             }
 47         }
 48     }
 49     for(int i=T;i>=1;i--){
 50         for(int j=i+1;j<=T;j++){
 51             a[i][N]-=a[i][j]*ans[j];
 52         }
 53         ans[i]=a[i][N]/a[i][i];
 54     }
 55
 56 }
 57 int main(){
 58     freopen("a.in","r",stdin);
 59     scanf("%d%d%d%d",&n,&m,&A,&B);
 60     int x,y;
 61     for(int i=1;i<=m;i++){
 62         scanf("%d%d",&x,&y);
 63         add(x,y); add(y,x);
 64         chu[x]++; chu[y]++;
 65     }
 66     for(int i=1;i<=n;i++){
 67         add(i,i);
 68         scanf("%lf",&p[i]);
 69     }
 70     memset(a,0,sizeof(a));
 71     int v1,v2;
 72     int R;
 73     a[(A-1)*n+B][n*n+1]=-1;
 74     for(int i=1;i<=n;i++){
 75         for(int j=1;j<=n;j++){
 76             R=(i-1)*n+j;
 77             a[R][R]=-1;
 78             for(int k=adj[i];k;k=g[k].nxt){
 79                 v1=g[k].v;
 80                 for(int h=adj[j];h;h=g[h].nxt){
 81                     v2=g[h].v;
 82                     if(v1==v2) continue;
 83                     if(v1==i && v2==j){
 84                         a[R][(i-1)*n+j]+=p[i]*p[j];
 85                     }
 86                     else if(v1==i && v2!=j){
 87                         a[R][(v1-1)*n+v2]+=p[v1]*((1-p[v2]));
 88                     }
 89                     else if(v1!=i && v2==j){
 90                         a[R][(v1-1)*n+v2]+=p[v2]*((1-p[v1]));
 91                     }
 92                     else if(v1!=i && v2!=j){
 93                         a[R][(v1-1)*n+v2]+=((1-p[v1]))*((1-p[v2]));
 94                     }
 95                 }
 96             }
 97         }
 98     }
 99     gs();
100     for(int i=1;i<=n;i++){
101         R=(i-1)*n+i;
102     //    cout<<"R== "<<"  "<<R<<endl;
103         printf("%.6lf ",ans[R]);
104     }
105     return 0;
106 }
时间: 2024-08-26 19:08:21

博物馆 bzoj3270的相关文章

BZOJ3270: 博物馆

3270: 博物馆 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 269  Solved: 147[Submit][Status][Discuss] Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博物馆.这座博物馆有着特别的样式.它包含由m条走廊连接的n间房间,并且满足可以从任何一间房间到任何一间别的房间. 两个人在博物馆里逛了一会儿后两人决定分头行动,去看各自感兴趣的艺术品.他

【BZOJ3270】【高斯消元】博物馆

Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博物馆.这座博物馆有着特别的样式.它包含由m条走廊连接的n间房间,并且满足可以从任何一间房间到任何一间别的房间. 两个人在博物馆里逛了一会儿后两人决定分头行动,去看各自感兴趣的艺术品.他们约定在下午六点到一间房间会合.然而他们忘记了一件重要的事:他们并没有选好在哪儿碰面.等时间到六点,他们开始在博物馆里到处乱跑来找到对方(他们没法给对方打电话因为电话漫游费是很贵的) 不过,尽管他们到

【概率dp 高斯消元】bzoj3270: 博物馆

一类成环概率dp的操作模式 Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博物馆.这座博物馆有着特别的样式.它包含由m条走廊连接的n间房间,并且满足可以从任何一间房间到任何一间别的房间. 两个人在博物馆里逛了一会儿后两人决定分头行动,去看各自感兴趣的艺术品.他们约定在下午六点到一间房间会合.然而他们忘记了一件重要的事:他们并没有选好在哪儿碰面.等时间到六点,他们开始在博物馆里到处乱跑来找到对方(他们没法给对方打电话因为电话漫游费

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

链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网址:blog.csdn.net/vmurder/article/details/46467273"); } 题解: 同BZOJ3143 游走 http://blog.csdn.net/Vmurder/article/details/44542575 代码略

【BZOJ3270】博物馆

题意:给定一张无向连通图,两个人初始各在某个点上,每个时刻每个人会不动或任选出边走,求两人最终期望在哪里相遇 网上题解除了PoPoQQQ都说的不好,确切的说给了我很多误导,PoPoQQQ的:http://blog.csdn.net/popoqqq/article/details/44777907 我的解法 状态表示为f[k][i][j]  表示第K步第一人在i第二人在j 按步数划分阶段,对于每个阶段f[k][i][j]可以由f[k - 1][p][q]推出来 要求的东西是 sigma i = 1

360全景漫游技术让博物馆、展厅永不闭馆

360全景制作通过把一组照片无缝拼接合成专业360全景拍摄,360全景视频采用技术制作成可以用鼠标随意上下左右前后拖动观看3D效果,如身临其境般感觉. 如今,这些令人尴尬的情况将不复存在,观众在参观博物馆时不仅不用再租讲解器,还能从手持的电子设备上看到展品的真实360全景.甚至可以坐在家里,通过鼠标就可以身临其境的感受艺术的氛围. 虚拟网上展厅结合了360全景.网络通讯技术.数据库技术等多种高科技手段,并采用嵌入IE页面的方式运行,无需下载客户端,普通家庭的带宽即可流畅在线观看畅游博物馆甚至可以

基于bootstrap模板-现代浏览器博物馆网页源代码

<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-wid

参观广东省博物馆

作者:朱金灿 来源:http://blog.csdn.net/clever101 过年放假在回京前路过广州,抽空参观了一下广东省博物馆,发现这还真是一个有特色而又免费的地方.在临江大道中公交站下车,往前走几十米,发现前面在一片大同小异的高楼大厦中出现一个很有特色的建筑,那感觉有点像在黄沙漫漫的沙漠中发现一片树林.我估计那就是广东博物馆了.它的真貌是这样的: (该图片来自网上) 春节期间恰好有一个广西壮族历史文化展--那山那水那人,正好参观了一下,发现壮族的文化也很有特色.看完壮族历史文化展,专心

实践周----军事博物馆

今天我们去了军事博物馆. 因为军事博物馆主体正在装修,所以只能参观外部的几个展棚,展品也相对较少. 以我国自行设计制造,并已列装的坦克.火炮.步战车.飞机.舰艇.导弹等大型系列兵器为主体,配以通信指挥.工程排爆.后勤保障等装备,全面展示我军大型兵器的种类.性能和发展趋势,传播常规军事装备知识,以提高民族自豪感的自信心.各种兵器装备按现代作战模式.带战术背景陈列.每个类别按照战斗要求配置,如导弹基地.防空群.后勤基地等,让观众既了解各类兵器的作用,又掌握现代战争常识.同时设计制作一大型指挥所,通过