bzoj 1415: [Noi2005]聪聪和可可【期望dp+bfs】

因为边权为1所以a直接bfs瞎搞就行……我一开始竟然写了个spfa
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
const int N=1005,inf=1e9;
int n,m,st,ed,h[N],cnt,a[N][N],b[N][N],dis[N][N],d[N];
double f[N][N];
bool v[N][N];
struct qwe
{
	int ne,to;
}e[N<<1];
int read()
{
	int r=0,f=1;
	char p=getchar();
	while(p>'9'||p<'0')
	{
		if(p=='-')
			f=-1;
		p=getchar();
	}
	while(p>='0'&&p<='9')
	{
		r=r*10+p-48;
		p=getchar();
	}
	return r*f;
}
void add(int u,int v)
{
	cnt++;
	e[cnt].ne=h[u];
	e[cnt].to=v;
	h[u]=cnt;
}
double dfs(int u,int v)
{
	if(f[u][v]>=-1)
		return f[u][v];
	if(u==v)
		return f[u][v]=0;
	if(dis[u][v]<=2)
		return f[u][v]=1;
	double p=1.0/((double)d[v]+1.0);
	f[u][v]=1;
	for(int i=h[v];i;i=e[i].ne)
		f[u][v]+=p*dfs(a[u][v],e[i].to);
	f[u][v]+=p*dfs(a[u][v],v);
	return f[u][v];
}
int main()
{
	n=read(),m=read(),st=read(),ed=read();
	for(int i=1;i<=m;i++)
	{
		int x=read(),y=read();
		d[x]++,d[y]++;
		add(x,y),add(y,x);
	}
	queue<int>q;
	for(int s=1;s<=n;s++)
	{
		v[s][s]=1;
		q.push(s);
		while(!q.empty())
		{
			int u=q.front();
			q.pop();
			for(int i=h[u];i;i=e[i].ne)
				if(!v[s][e[i].to])
				{
					dis[s][e[i].to]=dis[s][u]+1;
					v[s][e[i].to]=1;
					q.push(e[i].to);
				}
		}
	}
	for(int s=1;s<=n;s++)
		for(int u=1;u<=n;u++)
		{
			int mn=inf,w=inf;
			for(int i=h[s];i;i=e[i].ne)
				if(dis[e[i].to][u]<mn||(dis[e[i].to][u]==mn&&e[i].to<w))
					mn=dis[e[i].to][u],w=e[i].to;
			b[s][u]=w;
		}
	for(int s=1;s<=n;s++)
		for(int i=1;i<=n;i++)
			a[s][i]=dis[s][i]<=2?i:b[b[s][i]][i];
	// for(int i=1;i<=n;i++)
	// {
		// for(int j=1;j<=n;j++)
			// cerr<<a[i][j]<<" ";
		// cerr<<endl;
	// }
	memset(f,-1,sizeof(f));
	printf("%.3f\n",dfs(st,ed));
	return 0;
}
												
											bzoj 1415: [Noi2005]聪聪和可可【期望dp+bfs】的更多相关文章
- 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]聪聪和可可 期望DP+记忆化搜索
		
[题意]给定无向图,聪聪和可可各自位于一点,可可每单位时间随机向周围走一步或停留,聪聪每单位时间追两步(先走),问追到可可的期望时间.n<=1000. [算法]期望DP+记忆化搜索 [题解]首先 ...
 - bzoj 1415: [Noi2005]聪聪和可可 期望dp+记忆化搜索
		
期望dp水题~ 你发现每一次肯定是贪心走 2 步,(只走一步的话就可能出现环) 然后令 $f[i][j]$ 表示聪在 $i$,可在 $j$,且聪先手两个人碰上面的期望最小次数. 用记忆化搜索转移就行了 ...
 - BZOJ 1415 聪聪和可可(期望DP)
		
我们可以用n次BFS预处理出 to[][]数组,to[i][j]表示聪聪从i点到j点第一步会走哪个点. 那么对于聪聪在i点,可可在j点,聪聪先走,定义dp[i][j]表示步数期望. 那么显然有dp[i ...
 - bzoj 1415 [Noi2005]聪聪和可可——其实无环的图上概率
		
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1415 乍一看和“游走”一样.于是高斯消元.n^2状态,复杂度n^6…… 看看TJ,发现因为聪 ...
 - BZOJ 1415 [NOI2005]聪聪与可可 (概率DP+dfs)
		
题目大意:给你一个无向联通图,节点数n<=1000.聪聪有一个机器人从C点出发向在M点的可可移动,去追赶并吃掉可可,在单位时间内,机器人会先朝离可可最近的节点移动1步,如果移动一步机器人并不能吃 ...
 - BZOJ 1415: [Noi2005]聪聪和可可 [DP 概率]
		
传送门 题意:小兔子乖乖~~~ 题意·真:无向图吗,聪抓可,每个时间聪先走可后走,聪一次可以走两步,朝着里可最近且点编号最小的方向:可一次只一步,等概率走向相邻的点或不走 求聪抓住可的期望时间 和游走 ...
 - luogu P4206 [NOI2005]聪聪与可可 期望dp 记忆化搜索
		
LINK:聪聪与可可 这道题的核心是 想到如何统计答案. 如果设f[i][j]表示第i个时刻... 可以发现还需要统计位置信息 以及上一次到底被抓到没有的东西 不太好做. 两者的位置都在变化 所以需要 ...
 - 洛谷4206/NOI2005T4 聪聪和可可 期望DP+记忆化搜索
		
题意:给出n个点m条边的无向图,两个主角聪聪和可可开始分别在S点和T点.聪聪想吃掉可可,每次由匆匆先行动后来可可行动.聪聪的行动是选他到可可的最短路上的点走最多两步(如果最短路有几条就选编号最小的走) ...
 - BZOJ1415 聪聪与可可 - 期望dp
		
传送门 题目大意: 一张无向图上有一只猫和一只老鼠,猫先走,鼠后走.猫每次会向与其相邻的并且距离老鼠最近的点移动(若距离相等去编号较小的),如果移动一步后还没吃到老鼠,还可以再移动一步(算在一个时间内 ...
 
随机推荐
- JFinal Weixin 1.5 发布,微信极速 SDK
			
原文:http://www.oschina.net/news/67980/jfinal-weixin-1-5-released JFinal Weixin 1.5 大幅完善了对微信公众平台API的支持 ...
 - Python基础之 一 字符编码及转换
			
python2 / python3编码转换 先上图一张: 说明:python编码转换的流程是 先进行decode解码,然后进行encode编码 解释: u'你好' -->带u表示为unicod ...
 - codechef FUN WITH TREES
			
题目大意: 给一棵树root=1的树: 给一些操作:u v 的路径所有节点的node + val: 最后m个询问:u 节点(包括u) sum%mod 是多少. LCA + RMQ: 我们每次mark ...
 - Wannafly挑战赛4
			
A(枚举) =w= B(枚举) 分析: 枚举每一位,考虑每位贡献,就是相当于在一段区间内找有多少1在奇数位上,有多少个1在偶数位上,维护一下各自前缀和就行了 时间复杂度O(32n) C(签到) D(d ...
 - mybatisplus代码生成器
			
一.随便建一个springboot工程,在pom文件中导入依赖 <!-- 模板引擎 --> <dependency> <groupId>org.apache.vel ...
 - python执行
			
转载:https://www.cnblogs.com/zflibra/p/4180796.html
 - 【Todo】C++和Java里面的浮点数及各种数字表示
			
今天看了这篇文章,是讲C++中的浮点类型的:<浮点数的二进制表示> 再复习一下Java里面的Float和Double. 首先,直接数字赋值给Float变量是不行的,数字后要加上F,这样写: ...
 - HNU 12834 Thread Tree
			
递归输出即可了 #include<bits/stdc++.h> using namespace std; struct tree{ int dot; string s; } ...
 - 报错** is not accessible due to restriction on required library
			
报错: Description Resource Path Location TypeAccess restriction: The type Map<String,Object> is ...
 - HDU 3080 The plan of city rebuild(prim和kruskal)
			
The plan of city rebuild Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java ...