CF-346 D. Robot Control(反向建图spfa)
CF-346 D. Robot Control(反向建图spfa)
题目链接
题意
有向图(有环)中有一个机器人,机器人有三种规则:
- 重复访问同一个点会自我销毁
- 无路可走会自我销毁
- 多岔路口会随机选择
为了让机器人安全的从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]))
- 反向建图,从终点TTT出发
- 第一次访问vvv点 dp[v]=dp[u]+1dp[v] = dp[u] + 1dp[v]=dp[u]+1, 将点v加到队尾最后更新其他点
- 最后一次访问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)相关推荐
- POJ-1122 FDNY to the Rescue!---Dijkstra+反向建图
题目链接: https://vjudge.net/problem/POJ-1122 题目大意: 给出矩阵,矩阵中每个元素tij表示从第i个交叉路口到第j个交叉路口所需时间,若tij为-1则表示两交叉路 ...
- Invitation Cards POJ - 1511 SPFA(dijkstra+反向建图+邻接表(下标过大)+输入输出用stdio(iostream超时))
题目大意: 有编号1-P的站点, 有Q条公交车路线,公交车路线只从一个起点站直接 到达终点站,是单向的,每条路线有它自己的车费.有P个人早上从1出发 ,他们要到达每一个公交站点, 然后到了晚上再返回点 ...
- POJ 1511 Invitation Cards——Dijkstra优先队列优化+反向建图
[题目描述] In the age of television, not many people attend theater performances. Antique Comedians of M ...
- AcWing 4246. 最短路径和(反向建图+链式前向星+堆优化)
题目连接 https://www.acwing.com/problem/content/description/4249/ http://poj.org/problem?id=1511 思路 其实这道 ...
- cf1693C. Keshi in Search of AmShZ(div1)【最短路,反向建图】
传送门 题意 在一个有向图上需要从点 111 到点 nnn,每次可以选择以下一种操作: 1.删除一条边 2.随机移动到当前点能够通向的另一点 求所需操作次数到达终点的最大值的最小值 看到求最大值的最小 ...
- 【DFS反向建图记忆化搜索】UPC Contest2592 - 2020年秋季组队训练赛第十四场 问题 D: Mysterious Treasure
问题 D: Mysterious Treasure 时间限制: 1 Sec 内存限制: 128 MB 题目描述 WNJXYK and DIDIDI is playing a game. DIDIDI ...
- AcWing 1137. Choose the best route(朴素dijkstra反向建图 or 虚拟源点法)
题目比较简单,讲两种做法 法一.二都是用的朴素dijkstra算法 法一:反向建图 求终点s到每个起点的最短距离 O(T * (n^2 + n))(T表示多组测试数据)820ms #include & ...
- HDU 4857 逃生 【拓扑排序+反向建图+优先队列】
逃生 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission ...
- Nearest Opposite Parity(反向建边+spfa)
You are given an array aa consisting of nn integers. In one move, you can jump from the position ii ...
最新文章
- pyenv、pipenv 环境管理
- das服务器未响应是怎么回事,google-chrome - WSO2 Data Analytics Server-Analytics仪表板视图功能未响应任何浏览器 - 堆栈内存溢出...
- 熬夜的朋友注意了﹕看看器官的工作時間
- 小技巧之chm文件无法显示
- Word插入Latex公式的几种方式~(TeXsWord、EqualX、Aurora、向Office插入LaTeX公式的工具)
- bind()和connect()函数:绑定套接字并建立连接
- 像数据科学家一样思考:12步指南(上)
- 开源干货!.NET Core + Vue.js通用动态权限(RBAC)管理系统框架[DncZeus]开源
- ImageJ Nikon_科研论文作图之ImageJ
- OpenCv学习笔记(二)--Mat矩阵(图像容器)的创建及CV_8UC1,CV_8UC2等参数详解
- Different Integers
- 关于U-Net结构的更浅显更易懂的解释
- 2019 年(B题)巡线机器人
- 在日本的软件工程师之路
- 学计算机需要什么文具,开学需要准备哪些文具用品
- cmake flags
- 尚硅谷外卖项目笔记二
- 实体店也可以代办?外卖市场还需严加监管
- 复习3个月,雅思首考7.0
- 【今日CV 计算机视觉论文速览 第101期】Wed, 17 Apr 2019
热门文章
- 如何在Anaconda中实现多版本python Spyder共存
- Qt实现基本QMainWindow主窗口程序
- UltraEdit常用配置搭建Java/C开发环境
- SharePoint 2013 InfoPath 无法保存下列表单
- 爱迪生欺骗了世界! ----马云给雅虎员工演讲
- 数学、物理算法ActionScript实现(2)
- [网络安全提高篇] 一〇二.Metasploit技术之基础用法万字详解及防御机理
- 2015年第六届蓝桥杯 - 省赛 - C/C++大学B组 - A. 奖券数目
- 《408计算机网络》综合应用题
- 年薪201万的华为“天才少年”曾是三本复读生,逆袭就是抓住每一次提升自己的机会