博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P4206[NOI2005]聪聪与可可
阅读量:4977 次
发布时间:2019-06-12

本文共 1207 字,大约阅读时间需要 4 分钟。

链接

  • 类似于开车旅行,如果老鼠确定了那么猫的路线是确定的。
  • 预处理\(g_{i,j}\)表示老鼠在\(i\)号点,猫的下一步方向,\(Bfs\)就行了
  • \(f_{i,j}\)表示老鼠在\(i\),猫\(j\)的期望步,转移枚举出边状态即可。
  • 至于为什么这样的转移不会成环?
  • 因为猫始终是顺着老鼠的方向走的,老鼠每次走一步,猫每次走两步,也就是两者距离单调不升,又因为老鼠一直在走,所以转移关系不会成环,一定是拓扑关系。
#include
#define R register int#define db double using namespace std;const int N=2002;int n,m,s,t,u,v,cnt,hd[N],to[N],nt[N];int g[N][N],vis[N],Dis[N],du[N],rec[N][N];db f[N][N];void link(R f,R t){nt[++cnt]=hd[f],to[cnt]=t,hd[f]=cnt;}int gi(){ R x=0,k=1;char c=getchar(); while(c!='-'&&(c<'0'||c>'9'))c=getchar(); if(c=='-')k=-1,c=getchar(); while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+c-'0',c=getchar(); return x*k;}queue
Q;void Bfs(R s){ while(!Q.empty())Q.pop(); for(R i=1;i<=n;++i)Dis[i]=1e9,vis[i]=0; Dis[s]=0,vis[s]=1,Q.push(s),Dis[n+1]=1e9; while(!Q.empty()){ R i=Q.front();Q.pop(); for(R k=hd[i];k;k=nt[k]){ if(vis[to[k]])continue; if(Dis[to[k]]>Dis[i]+1) Dis[to[k]]=Dis[i]+1,Q.push(to[k]); } } for(R i=1;i<=n;++i) if(i!=s){ g[s][i]=n+1; for(R k=hd[i];k;k=nt[k]) if(Dis[to[k]]

转载于:https://www.cnblogs.com/Tyher/p/9878216.html

你可能感兴趣的文章
Edit控件显示多行文字
查看>>
JS第二周
查看>>
dataTable.NET的search box每輸入一個字母進行一次檢索的問題
查看>>
Python 文件处理
查看>>
邻接表详解
查看>>
迭代dict的value
查看>>
eclipse package,source folder,folder区别及相互转换
查看>>
Py 可能是最全面的 python 字符串拼接总结(带注释版)
查看>>
《Java程序设计实验》 软件工程18-1,3 OO实验2
查看>>
【Herding HDU - 4709 】【数学(利用叉乘计算三角形面积)】
查看>>
OPENSSL使用方法
查看>>
开发WINDOWS服务程序
查看>>
cross socket和msgpack的数据序列和还原
查看>>
解决跨操作系统平台JSON中文乱码问题
查看>>
更新.net core 3.0,dotnet ef命令无法使用的解决办法
查看>>
前端利器躬行记(1)——npm
查看>>
前端利器躬行记(2)——Babel
查看>>
前端利器躬行记(6)——Fiddler
查看>>
Intellij Idea新建web项目(转)
查看>>
用JAVA编写浏览器内核之实现javascript的document对象与内置方法
查看>>