BZOJ 1415: [Noi2005]聪聪和可可(记忆化搜索+期望)
##解题思路
还是比较简答的一道题。首先$bfs$把每个点到其他点的最短路求出来,然后再记忆化搜索。记搜的时候猫的走法是确定的,搜一下老鼠走法就行了。
##代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<queue>
using namespace std;
const int MAXN = 1005;
inline int rd(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)) {f=ch=='-'?0:1;ch=getchar();}
while(isdigit(ch)) {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return f?x:-x;
}
int n,m,head[MAXN],cnt,dis[MAXN][MAXN],to[MAXN<<1],nxt[MAXN<<1],S,T,du[MAXN];
double ans,f[MAXN][MAXN];
bool vis[MAXN];
queue<int> Q;
inline void add(int bg,int ed){
to[++cnt]=ed,nxt[cnt]=head[bg],head[bg]=cnt;
}
inline void bfs(int id){
memset(vis,false,sizeof(vis));
dis[id][id]=0;Q.push(id);vis[id]=1;int x,u;
while(Q.size()){
x=Q.front();Q.pop();
for(int i=head[x];i;i=nxt[i]){
u=to[i];if(vis[u]) continue;
dis[id][u]=dis[id][x]+1;vis[u]=1;
Q.push(u);
}
}
}
double dfs(int cat,int mouse){
if(f[cat][mouse]!=0.0) return f[cat][mouse];
int p=0;double sum=0;int prec=cat;
for(int t=0;t<=1;t++){
for(int i=head[cat];i;i=nxt[i]){
int u=to[i];if(dis[mouse][u]>=dis[mouse][cat]) continue;
if(!p || p>u) p=u;
}
if(p==mouse) return 1.0;cat=p;p=0;
}
if(cat==mouse) return 1.0;
for(int i=head[mouse];i;i=nxt[i]){
int u=to[i];
if(u==cat) sum+=1.0/(double)(du[mouse]+1);
else sum+=(double)(dfs(cat,u)+1.0)/(double)(du[mouse]+1);
}sum+=(double)(dfs(cat,mouse)+1.0)/(double)(du[mouse]+1);
return f[prec][mouse]=sum;
}
int main(){
memset(dis,0x3f,sizeof(dis));
n=rd(),m=rd();int x,y;S=rd();T=rd();
for(int i=1;i<=m;i++){
x=rd(),y=rd();
add(x,y),add(y,x);du[x]++;du[y]++;
}
for(int i=1;i<=n;i++) bfs(i);
printf("%.3lf",dfs(S,T));
return 0;
}
BZOJ 1415: [Noi2005]聪聪和可可(记忆化搜索+期望)的更多相关文章
- BZOJ1415[Noi2005]聪聪和可可——记忆化搜索+期望dp
题目描述 输入 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行 ...
- 【BZOJ 1415】 1415: [Noi2005]聪聪和可可 (bfs+记忆化搜索+期望)
1415: [Noi2005]聪聪和可可 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1640 Solved: 962 Description I ...
- Vijos1675 NOI2005 聪聪和可可 记忆化搜索
简单题,结果因为理解错题意懵逼了好久…… moveTo[x][y]表示聪聪在节点x,可可在节点y时,聪聪下一步应到达哪一个节点 dp[x][y]表示聪聪在节点x,可可在节点y,且轮到可可行动时,所需时 ...
- 【BZOJ】1415: [Noi2005]聪聪和可可【期望】【最短路】【记忆化搜索】
1415: [Noi2005]聪聪和可可 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2335 Solved: 1373[Submit][Stat ...
- 【BZOJ】1415 [Noi2005]聪聪和可可 期望DP+记忆化搜索
[题意]给定无向图,聪聪和可可各自位于一点,可可每单位时间随机向周围走一步或停留,聪聪每单位时间追两步(先走),问追到可可的期望时间.n<=1000. [算法]期望DP+记忆化搜索 [题解]首先 ...
- bzoj 1415: [Noi2005]聪聪和可可 期望dp+记忆化搜索
期望dp水题~ 你发现每一次肯定是贪心走 2 步,(只走一步的话就可能出现环) 然后令 $f[i][j]$ 表示聪在 $i$,可在 $j$,且聪先手两个人碰上面的期望最小次数. 用记忆化搜索转移就行了 ...
- bzoj 1415: [Noi2005]聪聪和可可
直接上记忆化搜索 #include<queue> #include<cstdio> #include<algorithm> using namespace std; ...
- 【NOI2005】聪聪和可可 概率与期望 记忆化搜索
1415: [Noi2005]聪聪和可可 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1635 Solved: 958[Submit][Statu ...
- 【bzoj1415】[Noi2005]聪聪和可可 期望记忆化搜索
题目描述 输入 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行 ...
随机推荐
- mongodb的学习 (3)
聚合函数 - 添加基础数据:db.local.save({contry:'中国',name:'小明',score:77});db.local.save({contry:'中国',name:'小红',s ...
- 在Kubernetes下部署Prometheus
使用ConfigMaps管理应用配置 当使用Deployment管理和部署应用程序时,用户可以方便了对应用进行扩容或者缩容,从而产生多个Pod实例.为了 能够统一管理这些Pod的配置信息,在Kuber ...
- mysql5.7问题:[Note] InnoDB: Waiting for page_cleaner to finish flushing of buffer pool
在关闭mysql5.7的时候发现问题,一直处于夯住状态 [root@localhost ~]# /etc/init.d/mysqld stop Shutting down MySQL......... ...
- leetcode-161周赛-1247-交换字符使得字符串相同
题目描述: 自己的提交: class Solution: def minimumSwap(self, s1: str, s2: str) -> int: count = {"xy&qu ...
- Delphi 消息函数 SendMessage函数
Delphi中SendMessage使用说明 SendMessage基础知识 函数功能:该函数将指定的消息发送到一个或多个窗口.此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回.而函数Po ...
- javascript表单验证的例子
function checkUsername(){ //对username的内容进行验证. //要求:首字符是字母或下划线,其他由下划线字母数字组成,共4-20位 var inputOb=docume ...
- PHP ftp_fget() 函数
定义和用法 ftp_fget() 函数从 FTP 服务器上下载一个文件并保存到本地一个已经打开的文件中. 如果成功,该函数返回 TRUE.如果失败,则返回 FALSE. 语法 ftp_fget(ftp ...
- bzoj1050题解
[解题思路] 先把边按边权排序,然后O(m)暴力枚举最小边,对于每条最小边,将比其大的边按序加入直到起终点连通,此时最大边权/最小边权即为选择该最小边情况下的最小比值.复杂度O(m(m+n)α(n)) ...
- TeleportPoint可瞬移的目标位置
TeleportPoint.png 最外部的组件: Animation: 包含了该装置的几个动画Teleport Point: 点传送的脚本 teleport_marker_mesh: 外部的圆柱形光 ...
- 【HTML】框架集(Framesets)
1.Frameset的使用 所谓框架便是网页画面分成几个框窗,同时取得多个 URL.只 要 <FRAMESET> <FRAME> 即可,而所有框架标记 要放在一个总起的 htm ...