洛谷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 【模板】点分治(聪聪可可)
题目描述 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好了,可是他们已 ...
随机推荐
- ELK日志系统+x-pack安全验证
根据之前已经搭好的ELK系统,现在加一个x-pack插件上去,不然谁拿到ip和端口都可以访问elasticsearch和kibana. 要的效果如下:打开kibana界面的时候要让其输入用户名密码才能 ...
- 五句话搞定JavaScript作用域(ES5)
JavaScript的作用域一直以来是前端开发中比较难以理解的知识点,对于JavaScript的作用域主要记住几句话,走遍天下都不怕... 一.“JavaScript中无块级作用域” 在Java或C# ...
- JSON Support in PostgreSQL and Entity Framework
JSON 和JSONB的区别(What's difference between JSON and JSONB data type in PosgresSQL?) When should be use ...
- Vue 刷新当前页面,并重新加载页面数据
业务场景:在管理后台,在执行完,增,删,改,操作的时候.我们需要刷新一下页面,重载数据.在JQ中我们会用到location.reload()方法,刷新页面:在vue中,这里需要用到一个 provide ...
- SpringBoot 中 JPA 的使用
详细连接 简书https://www.jianshu.com/p/c14640b63653 新建项目,增加依赖 在 Intellij IDEA 里面新建一个空的 SpringBoot 项目.具体步骤参 ...
- Python 中关于 round 函数的小坑
参考: http://www.runoob.com/w3cnote/python-round-func-note.html
- QTP 自动货测试桌面程序-笔记 (单据-下拉框选择、对话框 、菜单)
1 录制下拉框使用键盘上下键 回车键选择记录行 Window("驷惠WIN系列[汽车4S连锁管理软件] 6.").Window("采购计划").WinObjec ...
- SpringJdbc框架
import javax.sql.DataSource; import org.springframework.jdbc.core.JdbcTemplate; import JdbcUtils.Jdb ...
- python排序 sorted()与list.sort() (转)
该文章为转载:原文地址为:https://www.cnblogs.com/zuizui1204/p/6422939.html 只要是可迭代对象都可以用sorted . sorted(itrearble ...
- vue自定义组件及传值
1.使用 Vue.component() 方法注册组件 2.使用 props 属性传递参数 v-for="item in items": 遍历 Vue 实例中定义的名为 items ...