[bzoj1415][Noi2005]聪聪和可可
2013-08-17 15:36
330 查看
由于可以求出当老鼠在j点,猫在i点时猫的下一步决策next[i][j],于是就是水水的期望Dp了。
f[i][j]代表猫在i,老鼠在j时期望几步捉到老鼠。
f[i][j] = (f[next[next[i][j]][j]][j] + ∑(f[next[next[i][j]][j]][v]){(i,v)∈E})/(ind[j] + 1) + 1
// $(document).ready(function()
{
$("button").click(function()
{
$(".test1").toggle("slow");
});
});
// ]]>
View Code
f[i][j]代表猫在i,老鼠在j时期望几步捉到老鼠。
f[i][j] = (f[next[next[i][j]][j]][j] + ∑(f[next[next[i][j]][j]][v]){(i,v)∈E})/(ind[j] + 1) + 1
// $(document).ready(function()
{
$("button").click(function()
{
$(".test1").toggle("slow");
});
});
// ]]>
View Code
/************************************************************** Problem: 1415 User: lazycal Language: C++ Result: Accepted Time:148 ms Memory:12800 kb ****************************************************************/ #include <cstdio> #include <queue> const int N = 1000 + 9; double f ; int next ,son ,n,m,e,c,ind ,ec; struct Edge{int link,next;}es[N*2]; inline void addedge(const int x,const int y) { es[++ec].link = y; es[ec].next = son[x]; son[x] = ec; } inline void Addedge(const int x,const int y) {addedge(x,y);addedge(y,x);} void bfs(const int s) { static std::queue<int> q; static int vis ,time,dis ; ++time; dis[s] = 0; for (vis[s] = time,q.push(s); !q.empty(); q.pop()) { const int u = q.front(); for (int i = son[u]; i; i = es[i].next) { const int v = es[i].link; if (vis[v] == time) { if (dis[v] == dis[u] + 1 && next[s][v] > next[s][u]) next[s][v] = next[s][u]; continue; } if (u != s) next[s][v] = next[s][u]; else next[s][v] = v; vis[v] = time; dis[v] = dis[u] + 1; q.push(v); } } } double dp(const int x,const int y) { if (f[x][y] != -1) return f[x][y]; if (x == y) return f[x][y] = 0; if (next[x][y] == y || next[next[x][y]][y] == y) return f[x][y] = 1; f[x][y] = dp(next[next[x][y]][y],y); for (int i = son[y]; i; i = es[i].next) f[x][y] += dp(next[next[x][y]][y],es[i].link); return (f[x][y] /= ind[y] + 1) += 1; } int main() { #ifndef ONLINE_JUDGE freopen("1415.in","r",stdin); freopen("1415.out","w",stdout); #endif scanf("%d%d%d%d",&n,&e,&c,&m); for (int x,y;e--;) scanf("%d%d",&x,&y),Addedge(x,y),++ind[x],++ind[y]; for (int i = 1; i <= n; ++i) bfs(i); for (int i = 1; i <= n; ++i) for (int j = 1; j <= n; ++j) f[i][j] = -1.0; printf("%.3f\n",dp(c,m)); }
相关文章推荐
- bzoj1415 [Noi2005]聪聪和可可
- BZOJ 1415: [Noi2005]聪聪和可可
- BZOJ 1415 CODE[VS] 1784 [NOI2005 D2T2] 聪聪和可可
- BZOJ1415: [Noi2005]聪聪和可可 最短路 期望概率dp
- bzoj 1415: [Noi2005]聪聪和可可
- bzoj 1415: [Noi2005]聪聪和可可 (概率与期望)
- bzoj1415【NOI2005】聪聪和可可
- BZOJ 1415 NOI2005 聪聪和可可 期望DP+记忆化搜索 BZOJ200题达成&&NOI2005全AC达成
- 【NOI2005】bzoj1415 聪聪和可可
- bzoj1415: [Noi2005]聪聪和可可 记忆化搜索
- BZOJ1415: [Noi2005]聪聪和可可
- [BZOJ 1415][Noi2005]聪聪和可可:期望
- bzoj1415[NOI2005]聪聪和可可-期望的线性性
- BZOJ1415: [Noi2005]聪聪和可可
- BZOJ 1415: [Noi2005]聪聪和可可|概率dp
- bzoj1415 [Noi2005]聪聪和可可 (概率与期望)
- BZOJ 1415: [Noi2005]聪聪和可可 期望dp
- BZOJ 1415: [Noi2005]聪聪和可可 [DP 概率]
- [BZOJ1415][NOI2005]聪聪和可可-概率与期望
- bzoj1415[NOI2005]聪聪和可可