NOI2005 聪聪和可可
Sol
记忆化搜索.
\(f[u][v]\) 表示聪聪在 \(u\) ,可可在 \(v\) ,聪聪抓到可可的期望.
预处理出 \(u\) 到 \(v\) 最短路径编号最小的点,记为 \(g[u][v]\) .
点 \(u\) 的度数记为 \(du[u]\) .
显然递归出口就是
\(u==v\) 那么此时 \(f[u][v]=0\) 已经在同一个点了,不会再互相伤害了.
\(p[u][v]=v\) 或者 \(p[p[u][v],v]=v\) 那么就互相伤害吧! \(f[u][v]=1\)
对于其他情况
\(f[u][v]=(\frac{1}{du[v]+1} \sum_{k=1}^{du[i]} f[g[g[u][v]][v],p]+f[g[g[u][v]][v],v])+1,p\in Edge(v,p)\)
Code
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
#include<iostream>
using namespace std;
#define N 1005
inline int in(int x=0,char ch=getchar()){ while(ch>'9'||ch<'0') ch=getchar();
while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x; }
int n,m,s,t;int d[N],pre[N],p[N][N],du[N];bool b[N],vis[N][N];
double f[N][N];vector<int> g[N];
void SPFA(int S){
queue<int> q;memset(d,0x3f,sizeof(d));memset(b,0,sizeof(b));
d[S]=0,q.push(S),b[S]=1;
for(int u,v;!q.empty();){
u=q.front(),q.pop();
for(int i=0;i<du[u];i++){
if(d[v=g[u][i]]>d[u]+1||(d[v]==d[u]+1&&u<pre[v])){
d[v]=d[u]+1,pre[v]=u;if(!b[v]) q.push(v),b[v]=1;
}
}b[u]=0;
}for(int i=1;i<=n;i++) if(i!=S) p[i][S]=pre[i];
}
double DFS(int u,int v){
if(u==v) return f[u][v]=0;if(p[u][v]==v) return f[u][v]=1;if(p[p[u][v]][v]==v) return f[u][v]=1;
if(f[u][v]>1e-9) return f[u][v];f[u][v]=1;int nxt=p[p[u][v]][v];
for(int i=0;i<du[v];i++){
f[u][v]+=DFS(nxt,g[v][i])/(du[v]+1);
}f[u][v]+=DFS(nxt,v)/(du[v]+1);return f[u][v];
}
int main(){
n=in(),m=in(),s=in(),t=in();
for(int i=1,u,v;i<=m;i++)
du[u=in()]++,du[v=in()]++,g[u].push_back(v),g[v].push_back(u);
for(int i=1;i<=n;i++) SPFA(i);
return printf("%.3lf\n",DFS(s,t)),0;
}
NOI2005 聪聪和可可的更多相关文章
- 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), ...
- 【BZOJ1415】【NOI2005】聪聪和可可(动态规划,数学期望)
[BZOJ1415][NOI2005]聪聪和可可(动态规划,数学期望) 题面 BZOJ 题解 先预处理出当可可在某个点,聪聪在某个点时 聪聪会往哪里走 然后记忆化搜索一下就好了 #include< ...
- 【NOI2005】聪聪和可可 概率与期望 记忆化搜索
1415: [Noi2005]聪聪和可可 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1635 Solved: 958[Submit][Statu ...
- 【BZOJ 1415】 1415: [Noi2005]聪聪和可可 (bfs+记忆化搜索+期望)
1415: [Noi2005]聪聪和可可 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1640 Solved: 962 Description I ...
- 【BZOJ】1415: [Noi2005]聪聪和可可【期望】【最短路】【记忆化搜索】
1415: [Noi2005]聪聪和可可 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2335 Solved: 1373[Submit][Stat ...
- 【BZOJ】【1415】【NOI2005】聪聪和可可
数学期望+记忆化搜索 论文:<浅析竞赛中一类数学期望问题的解决方法>——汤可因 中的第一题…… Orz 黄学长 我实在是太弱,这么简单都yy不出来…… 宽搜预处理有点spfa的感觉= = ...
- BZOJ_1415_[Noi2005]聪聪和可可_概率DP+bfs
BZOJ_1415_[Noi2005]聪聪和可可_概率DP+bfs Description Input 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2 ...
- P4206[NOI2005]聪聪与可可
链接P4206 [NOI2005]聪聪与可可 类似于开车旅行,如果老鼠确定了那么猫的路线是确定的. 预处理\(g_{i,j}\)表示老鼠在\(i\)号点,猫的下一步方向,\(Bfs\)就行了 设\(f ...
- BZOJ 1415 【NOI2005】 聪聪和可可
题目链接:聪聪和可可 一道水题--开始还看错题了,以为边带权--强行\(O(n^3)\)预处理-- 首先,我们显然可以预处理出一个数组\(p[u][v]\)表示可可在点\(u\),聪聪在点\(v\)的 ...
- 【bzoj1415】 Noi2005—聪聪和可可
http://www.lydsy.com/JudgeOnline/problem.php?id=1415 (题目链接) 题意 一张图,聪聪想吃可可.每单位时间聪聪可以先移动两次:可可后移动一次或停在原 ...
随机推荐
- 自然语言20_The corpora with NLTK
QQ:231469242 欢迎喜欢nltk朋友交流 https://www.pythonprogramming.net/nltk-corpus-corpora-tutorial/?completed= ...
- java实现Haffman编码
1.先创建一个树节点类(泛型类),为了方便使用集合的排序方法,泛型类要实现泛型接口Comparable,代码如下 package com.hjp.huffman; /** * Created by J ...
- Java实例分析:宠物商店
设计一个“宠物商店”,在宠物商店中可以有多种宠物,试表示出此种关系,并要求可以根据宠物的关键字查找相应的宠物信息. //======================================== ...
- (转)Java API设计清单
转自: 伯乐在线 Java API设计清单 英文原文 TheAmiableAPI 在设计Java API的时候总是有很多不同的规范和考量.与任何复杂的事物一样,这项工作往往就是在考验我们思考的缜密程度 ...
- 比较详细Python正则表达式操作指南(re使用)
比较详细Python正则表达式操作指南(re使用) Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式.Python 1.5之前版本则是通过 regex 模块提供 E ...
- nodeJS接受post传过来的参数
1.nodeJs接受Post传递的参数需要通过绑定两个事件来获取, querystring = require("querystring"); 1 app.post('/comm ...
- 常用的JS HTML DOM 事件
HTML DOM 事件 HTML DOM 事件允许Javascript在HTML文档元素中注册不同事件处理程序. 事件通常与函数结合使用,函数不会在事件发生前被执行! (如用户点击按钮). 提示: 在 ...
- Django笔记-登陆注册-1
1.项目结构(eclipse+PyDev工具)(粘上来后代码缩进格式没有了,就先不整了) 2.关键代码: test_log03.settings.py INSTALLED_APPS = ( 'djan ...
- csrf利用EXP
<html><body><form action="http://www.xxx.com/user/setting/email_bind.html" ...
- Java7的异常处理新特性-addSuppressed()方法等
开发人员对异常处理的try-catch-finally语句块都比较熟悉.如果在try语句块中抛出了异常,在控制权转移到调用栈上一层代码之前,finally语句块中的语句也会执行.但是finally语句 ...