bzoj1415: [Noi2005]聪聪和可可 记忆化搜索
来源:互联网 发布:linux如何查看文件大小 编辑:程序博客网 时间:2024/06/05 08:04
由于猫每次都走最短路,我们可以把老鼠所在每个点时猫会怎么走给处理出来。
若i==j 则f[i][j]=0
若p[i][j]==j||p[p[i][j]][j]==j则f[i][j]=1
否则令temp=p[p[i][j]][j],则有
其中degree[j]表示j的连边数量
#include <iostream>#include <cmath>#include <algorithm>#include <cstdio>#include <cstring>#include <vector>#include <queue>using namespace std;#define pb(a) push_back(a)#define maxn 1100double f[maxn][maxn];int pl[maxn][maxn];int n,m,st,ed,deg[maxn];vector<int>g[maxn];int dis[maxn],vis[maxn],from[maxn];void spfa(int s){ memset(dis,0x3f3f3f3f,sizeof(dis)); dis[s]=0; queue<int>q; q.push(s); while(!q.empty()) { int u=q.front(); q.pop(); vis[u]=0; int len=g[u].size(); for(int i=0;i<len;i++) { int v=g[u][i]; if(dis[v]>dis[u]+1 || (dis[v]==dis[u]+1&&u<from[v])) { dis[v]=dis[u]+1; from[v]=u; if(!vis[v]) { vis[v]=1; q.push(v); } } } } for(int i=1;i<=n;i++) { if(i==s) continue; pl[i][s]=from[i]; }}double dfs(int x,int y){ if(x==y) return f[x][y]=0.0; if(y==pl[x][y]) return f[x][y]=1.0; if(y==pl[pl[x][y]][y]) return f[x][y]=1.0; if(f[x][y]>=-1e-7) return f[x][y]; double re=0; int v=pl[pl[x][y]][y]; int len=g[y].size(); for(int i=0;i<len;i++) { re+=dfs(v,g[y][i]); } re+=dfs(v,y); re=re/double(deg[y]+1)+1; return f[x][y]=re;}int main(){ scanf("%d%d",&n,&m); scanf("%d%d",&st,&ed); for(int i=1;i<=m;i++) { int a,b; scanf("%d%d",&a,&b); g[a].pb(b); deg[a]++; g[b].pb(a); deg[b]++; } for(int i=1;i<=n;i++) spfa(i); memset(f,0xc2,sizeof f); printf("%.3f",dfs(st,ed)); return 0;}
0 0
- bzoj1415: [Noi2005]聪聪和可可 记忆化搜索
- 【BZOJ1415】【Noi2005】聪聪和可可 概率DP 记忆化搜索
- [bzoj1415][Noi2005]聪聪和可可 期望DP+记忆化搜索 & bzoj100题
- BZOJ1415 [Noi2005]聪聪和可可
- bzoj1415【NOI2005】聪聪和可可
- BZOJ1415: [Noi2005]聪聪和可可
- BZOJ1415: [Noi2005]聪聪和可可
- 【NOI2005】bzoj1415 聪聪和可可
- bzoj1415: [Noi2005]聪聪和可可
- [NOI2005]BZOJ1415 聪聪和可可
- 【BZOJ1415】】聪聪和可可 记忆化搜索的概率dp
- 【bzoj1415】【聪聪和可可】期望dp(记忆化搜索)+最短路
- [BZOJ1415][NOI2005]聪聪和可可-概率与期望
- bzoj1415 [Noi2005]聪聪和可可 (概率与期望)
- 1415: [Noi2005]聪聪和可可 概率与期望 记忆化搜索
- BZOJ 1415: [Noi2005]聪聪和可可 概率DP,记忆化搜索,BFS
- BZOJ 1415 NOI2005 聪聪和可可 期望DP+记忆化搜索 BZOJ200题达成&&NOI2005全AC达成
- BZOJ1415 聪聪和可可
- plsql连接不上64位oracle11g的解决办法
- hadoop内存大小设置问题
- C#正则表达式的简单用法
- java与c#的区别(一)
- vim 的分屏与多标签应用
- bzoj1415: [Noi2005]聪聪和可可 记忆化搜索
- 12门徒数到3被挑出找出最后剩下的叛徒
- 引用计数型智能指针
- Android studio 解决setText中文乱码问题
- 统计字符串中每个字符的个数
- Java 中的关键字 synchronized详解
- ios之protocol和delegate——下拉菜单实例
- Java调试
- cocoaPods使用记录