CF-346 D. Robot Control(反向建图spfa)

题目链接

题意

有向图(有环)中有一个机器人,机器人有三种规则:

  1. 重复访问同一个点会自我销毁
  2. 无路可走会自我销毁
  3. 多岔路口会随机选择

为了让机器人安全的从SSS到TTT,可以在多岔路口制定它的方向来避免情况1,2的发生,求最少需要指定方向几次

思路

有一个转移方程:

对于点uuu和它所有的出边vvv,dp[u]dp[u]dp[u]表示从uuu点到TTT最少需要指定方向的次数

dp[u]=min(min(dp[v])+1,max(dp[v]))dp[u] = min(min(dp[v]) + 1, max(dp[v]))dp[u]=min(min(dp[v])+1,max(dp[v]))

  1. 反向建图,从终点TTT出发
  2. 第一次访问vvv点 dp[v]=dp[u]+1dp[v] = dp[u] + 1dp[v]=dp[u]+1, 将点v加到队尾最后更新其他点
  3. 最后一次访问vvv点 dp[v]=min(dp[v],dp[u])dp[v] = min(dp[v], dp[u])dp[v]=min(dp[v],dp[u]), 将点v加到队首优先更新其他点

这题用cincincin很慢不知道为啥…(CF不是不卡读入吗?)

#include <bits/stdc++.h>
const int maxn = 1e6 + 5;
const int inf = 0x3f3f3f3f;
const int mod = 1e9 + 7;
using namespace std;
int in[maxn], dp[maxn], vis[maxn];
vector<int> g[maxn];
void bfs(int s, int e) {fill(dp, dp+maxn, -1);fill(vis, vis+maxn, 0);deque<int> que;que.push_back(e);dp[e] = 0;while (!que.empty()) {int u = que.front();que.pop_front();if (vis[u]) continue;vis[u] = 1;if (u == s) return;for (auto v : g[u]) {in[v]--;if (in[v] == 0 && (dp[v] == -1 || dp[v] > dp[u])) {// 最后访问v点dp[v] = dp[u];que.push_front(v); // 优先更新下一个点}else if(dp[v] == -1) {// 第一次访问v点dp[v] = dp[u] + 1;que.push_back(v); // 最后更新下个点}}}
}
int main() {int n, m;scanf("%d %d", &n, &m);fill(in, in+maxn, 0);for (int i = 0; i < m; ++i) {int u, v;scanf("%d %d", &u, &v);g[v].push_back(u);in[u]++;}int s, e;scanf("%d %d", &s, &e);bfs(s, e);printf("%d\n", dp[s]);return 0;
}

CF-346 D. Robot Control(反向建图spfa)相关推荐

  1. POJ-1122 FDNY to the Rescue!---Dijkstra+反向建图

    题目链接: https://vjudge.net/problem/POJ-1122 题目大意: 给出矩阵,矩阵中每个元素tij表示从第i个交叉路口到第j个交叉路口所需时间,若tij为-1则表示两交叉路 ...

  2. Invitation Cards POJ - 1511 SPFA(dijkstra+反向建图+邻接表(下标过大)+输入输出用stdio(iostream超时))

    题目大意: 有编号1-P的站点, 有Q条公交车路线,公交车路线只从一个起点站直接 到达终点站,是单向的,每条路线有它自己的车费.有P个人早上从1出发 ,他们要到达每一个公交站点, 然后到了晚上再返回点 ...

  3. POJ 1511 Invitation Cards——Dijkstra优先队列优化+反向建图

    [题目描述] In the age of television, not many people attend theater performances. Antique Comedians of M ...

  4. AcWing 4246. 最短路径和(反向建图+链式前向星+堆优化)

    题目连接 https://www.acwing.com/problem/content/description/4249/ http://poj.org/problem?id=1511 思路 其实这道 ...

  5. cf1693C. Keshi in Search of AmShZ(div1)【最短路,反向建图】

    传送门 题意 在一个有向图上需要从点 111 到点 nnn,每次可以选择以下一种操作: 1.删除一条边 2.随机移动到当前点能够通向的另一点 求所需操作次数到达终点的最大值的最小值 看到求最大值的最小 ...

  6. 【DFS反向建图记忆化搜索】UPC Contest2592 - 2020年秋季组队训练赛第十四场 问题 D: Mysterious Treasure

    问题 D: Mysterious Treasure 时间限制: 1 Sec 内存限制: 128 MB 题目描述 WNJXYK and DIDIDI is playing a game. DIDIDI ...

  7. AcWing 1137. Choose the best route(朴素dijkstra反向建图 or 虚拟源点法)

    题目比较简单,讲两种做法 法一.二都是用的朴素dijkstra算法 法一:反向建图 求终点s到每个起点的最短距离 O(T * (n^2 + n))(T表示多组测试数据)820ms #include & ...

  8. HDU 4857 逃生 【拓扑排序+反向建图+优先队列】

    逃生 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission ...

  9. Nearest Opposite Parity(反向建边+spfa)

    You are given an array aa consisting of nn integers. In one move, you can jump from the position ii ...

最新文章

  1. pyenv、pipenv 环境管理
  2. das服务器未响应是怎么回事,google-chrome - WSO2 Data Analytics Server-Analytics仪表板视图功能未响应任何浏览器 - 堆栈内存溢出...
  3. 熬夜的朋友注意了﹕看看器官的工作時間
  4. 小技巧之chm文件无法显示
  5. Word插入Latex公式的几种方式~(TeXsWord、EqualX、Aurora、向Office插入LaTeX公式的工具)
  6. bind()和connect()函数:绑定套接字并建立连接
  7. 像数据科学家一样思考:12步指南(上)
  8. 开源干货!.NET Core + Vue.js通用动态权限(RBAC)管理系统框架[DncZeus]开源
  9. ImageJ Nikon_科研论文作图之ImageJ
  10. OpenCv学习笔记(二)--Mat矩阵(图像容器)的创建及CV_8UC1,CV_8UC2等参数详解
  11. Different Integers
  12. 关于U-Net结构的更浅显更易懂的解释
  13. 2019 年(B题)巡线机器人
  14. 在日本的软件工程师之路
  15. 学计算机需要什么文具,开学需要准备哪些文具用品
  16. cmake flags
  17. 尚硅谷外卖项目笔记二
  18. 实体店也可以代办?外卖市场还需严加监管
  19. 复习3个月,雅思首考7.0
  20. 【今日CV 计算机视觉论文速览 第101期】Wed, 17 Apr 2019

热门文章

  1. 如何在Anaconda中实现多版本python Spyder共存
  2. Qt实现基本QMainWindow主窗口程序
  3. UltraEdit常用配置搭建Java/C开发环境
  4. SharePoint 2013 InfoPath 无法保存下列表单
  5. 爱迪生欺骗了世界! ----马云给雅虎员工演讲
  6. 数学、物理算法ActionScript实现(2)
  7. [网络安全提高篇] 一〇二.Metasploit技术之基础用法万字详解及防御机理
  8. 2015年第六届蓝桥杯 - 省赛 - C/C++大学B组 - A. 奖券数目
  9. 《408计算机网络》综合应用题
  10. 年薪201万的华为“天才少年”曾是三本复读生,逆袭就是抓住每一次提升自己的机会