BZOJ 1415 聪聪和可可(概率DP)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1415
题意:一个无向图,一个猫、一只老鼠。在任意时刻猫知道老鼠在哪个顶点上。每次移动猫先。猫每次向靠近老鼠的顶点移动。若没有到达老鼠所在顶点,则接着再移动一次(即便是两次也是用的一个时间单位);然后老鼠移动;老鼠每次向周围的顶点移动或者呆在原地不动,概率相同。猫和老鼠在一个顶点上则吃掉老鼠。求吃掉老鼠的时间期望。
思路:设f[i][j][0]表示猫在i、老鼠在j、轮到猫移动的期望;f[i][j][1]表示轮到老鼠移动的期望。则对于固定的i和j,轮到猫移动时,下一次猫移动到的顶点是固定的,设为s,则f[i][j][0]=f[s][j][1]+1;对于老鼠,设与其相邻顶点集合为S,大小为num,则f[i][j][1]=(sum(f[i][Sk][0])+f[i][j][0])/(num+1)。一开始我担心会出现兜圈子的情况,就是老鼠在转,猫跟着转,这样就麻烦了,貌似需要列方程求解。但是分析一下不会出现这种情况,因为猫每次移动两个,老鼠最多移动一个,猫总能撵上老鼠的。。
vector<int> g[N];
int dis[N][N],p[N][N];
double f[N][N][2];
int n,m,S,T;
void SPFA(int u,int dis[])
{
int i;
FOR1(i,n) dis[i]=INF;
dis[u]=0;
queue<int> Q;
Q.push(u);
int visit[N]={0};
visit[u]=1;
int v;
while(!Q.empty())
{
u=Q.front();
Q.pop();
visit[u]=0;
FOR0(i,SZ(g[u]))
{
v=g[u][i];
if(dis[v]>dis[u]+1)
{
dis[v]=dis[u]+1;
if(!visit[v]) Q.push(v),visit[v]=1;
}
}
}
}
int cal(int u,int v)
{
if(u==v) return u;
int i,x,Min=INF,k;
FOR0(i,SZ(g[u]))
{
x=g[u][i];
if(dis[v][x]<Min||dis[v][x]==Min&&x<k) Min=dis[v][x],k=x;
}
if(k==v) return k;
Min=INF;
FOR0(i,SZ(g[k]))
{
x=g[k][i];
if(dis[v][x]<Min||dis[v][x]==Min&&x<u) Min=dis[v][x],u=x;
}
return u;
}
void init()
{
int i,j;
FOR1(i,n) SPFA(i,dis[i]);
FOR1(i,n) FOR1(j,n) p[i][j]=cal(i,j);
}
double DFS(int u,int v,int t)
{
if(u==v) return 0;
if(f[u][v][t]>-1) return f[u][v][t];
int i,x;
if(t==0) f[u][v][t]=DFS(p[u][v],v,1)+1;
else
{
f[u][v][t]=0;
FOR0(i,SZ(g[v]))
{
x=g[v][i];
f[u][v][t]+=DFS(u,x,0);
}
f[u][v][t]+=DFS(u,v,0);
f[u][v][t]/=SZ(g[v])+1;
}
return f[u][v][t];
}
int main()
{
RD(n,m); RD(S,T);
int i,x,y;
FOR1(i,m)
{
RD(x,y);
g[x].pb(y);
g[y].pb(x);
}
init();
clr(f,-1);
PR(DFS(S,T,0));
}
BZOJ 1415 聪聪和可可(概率DP)的更多相关文章
- BZOJ 1415 [NOI2005]聪聪与可可 (概率DP+dfs)
题目大意:给你一个无向联通图,节点数n<=1000.聪聪有一个机器人从C点出发向在M点的可可移动,去追赶并吃掉可可,在单位时间内,机器人会先朝离可可最近的节点移动1步,如果移动一步机器人并不能吃 ...
- BZOJ 1415: [Noi2005]聪聪和可可( 最短路 + 期望dp )
用最短路暴力搞出s(i, j)表示聪聪在i, 可可在j处时聪聪会走的路线. 然后就可以dp了, dp(i, j) = [ dp(s(s(i,j), j), j) + Σdp(s(s(i,j), j), ...
- bzoj 1415 [Noi2005]聪聪和可可——其实无环的图上概率
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1415 乍一看和“游走”一样.于是高斯消元.n^2状态,复杂度n^6…… 看看TJ,发现因为聪 ...
- 【BZOJ 1419】Red is good [概率DP]
我 是 Z Z 概率好玄啊(好吧是我太弱.jpg Description 桌面上有R张红牌和B张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付出1美元.可以随时停止翻 ...
- BZOJ 1415: [Noi2005]聪聪和可可 [DP 概率]
传送门 题意:小兔子乖乖~~~ 题意·真:无向图吗,聪抓可,每个时间聪先走可后走,聪一次可以走两步,朝着里可最近且点编号最小的方向:可一次只一步,等概率走向相邻的点或不走 求聪抓住可的期望时间 和游走 ...
- bzoj 1415: [Noi2005]聪聪和可可 期望dp+记忆化搜索
期望dp水题~ 你发现每一次肯定是贪心走 2 步,(只走一步的话就可能出现环) 然后令 $f[i][j]$ 表示聪在 $i$,可在 $j$,且聪先手两个人碰上面的期望最小次数. 用记忆化搜索转移就行了 ...
- bzoj 1415: [Noi2005]聪聪和可可【期望dp+bfs】
因为边权为1所以a直接bfs瞎搞就行--我一开始竟然写了个spfa #include<iostream> #include<cstdio> #include<queue& ...
- bzoj 1415: [Noi2005]聪聪和可可
直接上记忆化搜索 #include<queue> #include<cstdio> #include<algorithm> using namespace std; ...
- BZOJ 1415: [Noi2005]聪聪和可可(记忆化搜索+期望)
传送门 解题思路 还是比较简答的一道题.首先\(bfs\)把每个点到其他点的最短路求出来,然后再记忆化搜索.记搜的时候猫的走法是确定的,搜一下老鼠走法就行了. 代码 #include<iostr ...
- BZOJ 1246 & 有点不一样的概率DP
题意: 题意够坑的啊... 一个色子有n个面,第k次掷出一个加上这个k.求掷出所有面的期望值. 我一直以为值是色子面上的... 那么问题来了在色子面上怎么做...n还是1w级别... SOL: 对着理 ...
随机推荐
- 【概率DP/高斯消元】BZOJ 2337:[HNOI2011]XOR和路径
2337: [HNOI2011]XOR和路径 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 682 Solved: 384[Submit][Stat ...
- Poj 2349 Arctic Network 分类: Brush Mode 2014-07-20 09:31 93人阅读 评论(0) 收藏
Arctic Network Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9557 Accepted: 3187 De ...
- asp.net 分布式缓存
之前Velocity已被 集成到App Fabric(包含有WCF监控==)中. 网络Velocity使用大多是针对老版本: 老版本的下载地址: http://www.microsoft.co ...
- 对话框Dialog
QMainWindow QMainWindow是 Qt 框架带来的一个预定义好的主窗口类. 主窗口,就是一个普通意义上的应用程序(不是指游戏之类的那种)最顶层的窗口.通常是由一个标题栏,一个菜单栏,若 ...
- JavaScript之Throw、Try 、Catch讲解
try 语句测试代码块的错误. catch 语句处理错误. throw 语句创建自定义错误. 错误一定会发生 当 JavaScript 引擎执行 JavaScript 代码时,会发生各种错误: 可能是 ...
- CSS预处理器实践之Sass、Less大比拼[转]
什么是CSS预处理器? CSS可以让你做很多事情,但它毕竟是给浏览器认的东西,对开发者来说,Css缺乏很多特性,例如变量.常量以及一些编程语法,代码难易组织和维护.这时Css预处理器就应运而生了.Cs ...
- SQL技术内幕-10 in和exists 性能比较
in和exists in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询. 一直以来认为exists比in效率高的说法是不准确的. 如果查询的两 ...
- 什么是Nib文件?(Nib文件是一种特殊类型的资源文件,它用于保存iPhone OS或Mac OS X应用程序的用户接口)
Nib文件是一种特殊类型的资源文件,它用于保存iPhone OS或Mac OS X应用程序的用户接口.Nib文件是Interface Builder文档.通常您会使用Interface Builder ...
- 在C#中读写INI配置文件(转)
在作应用系统开发时,管理配置是必不可少的.例如数据库服务器的配置.安装和更新配置等等.由于Xml的兴起,现在的配置文件大都是以xml文档来存储.比如Visual Studio.Net自身的配置文件Ma ...
- jmeter线程组之间传递参数
JMeter 变量作用域局限于所属线程.这样设计是经过深思熟虑的,目的是让测试线程能够独立运转.有时候用户可能需要在不同线程间(可能属于同一个线程组,也可能不属于同一个线程组)传递变量. 其中一种方法 ...