洛谷P4206 聪聪与可可
无向简单图上给定s,t。每秒s先向t按照最短路走两步(优先节点编号较小的),然后t随机行动一步。
问期望多少秒相遇。n <= 1000
解:
这个s太蛇皮了...所以预处理一波。
然后不会,看题解发现是SB记忆化搜索......
#include <bits/stdc++.h> const int N = ;
const double eps = 1e-; struct Edge {
int nex, v;
}edge[N << ]; int tp; int e[N], gt[N][N], n, m, fr[N], d[N], vis[N], in[N], frfr[N];
double f[N][N];
std::queue<int> Q; inline void add(int x, int y) {
tp++;
edge[tp].v = y;
edge[tp].nex = e[x];
e[x] = tp;
return;
} void DFS(int x, int s) {
for(int i = e[x]; i; i = edge[i].nex) {
int y = edge[i].v;
if(fr[y] == x) {
gt[s][y] = gt[s][x];
DFS(y, s);
}
}
return;
} inline void BFS(int s) {
Q.push(s);
vis[s] = s;
d[s] = ;
fr[s] = ; frfr[s] = ;
while(Q.size()) {
int x = Q.front();
Q.pop();
for(int i = e[x]; i; i = edge[i].nex) {
int y = edge[i].v;
if(vis[y] != s) {
vis[y] = s;
d[y] = d[x] + ;
fr[y] = x;
frfr[y] = (x == s) ? y : frfr[x];
Q.push(y);
}
else if(d[y] == d[x] + ) {
if(frfr[x] < frfr[y]) {
frfr[y] = frfr[x];
fr[y] = x;
}
}
}
}
/// get gt
gt[s][s] = s; f[s][s] = ;
for(int i = e[s]; i; i = edge[i].nex) {
int y = edge[i].v;
gt[s][y] = y;
DFS(y, s);
}
return;
} double F(int x, int y) {
if(f[x][y] >= -eps) {
return f[x][y];
}
if(gt[x][y] == y || gt[gt[x][y]][y] == y) {
return f[x][y] = ;
}
double ans = ; int z = gt[gt[x][y]][y];
for(int i = e[y]; i; i = edge[i].nex) {
int w = edge[i].v;
ans += F(z, w);
}
ans += F(z, y); return f[x][y] = ans / (in[y] + ) + ;
} int main() {
int s, t;
scanf("%d%d", &n, &m);
scanf("%d%d", &s, &t);
for(int i = , x, y; i <= m; i++) {
scanf("%d%d", &x, &y);
add(x, y); add(y, x);
in[x]++; in[y]++;
} for(int i = ; i <= n; i++) {
for(int j = ; j <= n; j++) {
f[i][j] = -;
}
} for(int i = ; i <= n; i++) {
BFS(i);
} /*printf("-----------\n");
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
printf("%d ", gt[i][j]);
}
printf("\n");
}
printf("-----------\n");
*/ printf("%.3f\n", F(s, t));
return ;
}
AC代码
感觉不会死循环的原因是每次之后s和t的距离至少减少1,至多减少3。按s和t的距离分层的话每一步都走到了不同的层。
洛谷P4206 聪聪与可可的更多相关文章
- 洛谷 P4206 [NOI2005]聪聪与可可 题解
题面 输入 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行,每 ...
- 洛谷P4206 [NOI2005]聪聪与可可(期望dp+最短路)
传送门 首先,猫的走位太飘了……只能预处理…… 先对每一个点跑一遍dijkstra跑出最短路,然后再预处理出$nxt[i][j]$表示当猫在$i$老鼠在$j$时猫下一步会走到哪里 然后考虑dp,设$d ...
- 洛谷4206/NOI2005T4 聪聪和可可 期望DP+记忆化搜索
题意:给出n个点m条边的无向图,两个主角聪聪和可可开始分别在S点和T点.聪聪想吃掉可可,每次由匆匆先行动后来可可行动.聪聪的行动是选他到可可的最短路上的点走最多两步(如果最短路有几条就选编号最小的走) ...
- 模板—点分治A(容斥)(洛谷P2634 [国家集训队]聪聪可可)
洛谷P2634 [国家集训队]聪聪可可 静态点分治 一开始还以为要把分治树建出来……• 树的结构不发生改变,点权边权都不变,那么我们利用刚刚的思路,有两种具体的分治方法.• A:朴素做法,直接找重心, ...
- 洛谷 2634&&BZOJ 2152: 聪聪可可【点分治学习+超详细注释】
2152: 聪聪可可 Time Limit: 3 Sec Memory Limit: 259 MBSubmit: 3435 Solved: 1776[Submit][Status][Discuss ...
- 洛谷P2634 [国家集训队]聪聪可可 (点分治)
题目描述 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好了,可是他们已 ...
- AC日记——【模板】点分治(聪聪可可) 洛谷 P2634
[模板]点分治(聪聪可可) 思路: 点分治: (感谢灯神) 代码: #include <bits/stdc++.h> using namespace std; #define maxn 2 ...
- 洛谷 P2634 [国家集训队]聪聪可可 解题报告
P2634 [国家集训队]聪聪可可 题目描述 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)--遇到这种问题,一 ...
- 洛谷 P2634 BZOJ 2152 【模板】点分治(聪聪可可)
题目描述 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好了,可是他们已 ...
随机推荐
- C# Note15:设置Window图标的正确方式
Windows Presentation Foundation(WPF)独立应用程序有两种类型的图标: 一个程序集(assembly) 图标,通过在应用程序的项目构建文件中使用<Applicat ...
- JS 将值插入数组中
使用 push 方法 1.var arr = [1,2,3] arr.push(数值) 或者 arr.push({xxx:数值}) 2.输出数组中的最后一个 console.log(arr.[arr. ...
- maven+springmvc项目启动时,request mapping not found……
springmvc项目跑的好好的,跑着跑着,出现request mapping not found的问题. 第一波,网上查问题,stackoverflow上面的各种配置说明,但是我本地就是没查出问题 ...
- restful 规范(建议)
需求:开发cmdb,对用户进行管理. 做前后端分离,后端写api(URL),对用户表进行增删改查,应该写四个URL(还要给文档(返回值,返回,请求成功,干嘛,失败,干嘛)),然后分别写视图函数. ht ...
- java 调用 wsdl形式的webservice 示例
import java.rmi.RemoteException; import javax.xml.rpc.ParameterMode; import javax.xml.rpc.ServiceExc ...
- 安装使用阿里云的yum源
CentOS 1.备份(备份本地Yum源) mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 2.下 ...
- fiddler学习笔记2 字段说明;移动设备、解密证书
# : 抓取顺序从1开始递增 result: http 请求状态 protocol: 请求使用的协议如:http https ftp Host: 请求地址 ...
- vue ajax
局部get: this.$http.get(url,{param:jsonData}).then(successCallback,failCallBack) 局部post: this.$http.po ...
- 4.namespace
命名空间( namespace)是 Linux 内核的一个强大特性,为容器虚拟化的实现带来极大便 利. 利用这一特性,每个容器都可以拥有自己单独的命名空间,运行在其中的应用都像是在 独立的操作系统环境 ...
- vhdl——type
TYPE 数据类型名 IS 数据类型定义 OF 基本数据类型 TYPE 数据类型名 IS 数据类型定义 常用的用户自定义的数据类型有枚举型,数组型,记录型.其中枚举型的在状态机的描述中经常使用到 ,数 ...