I - Robots

显然可以两点之间能连边就连边,但是边数会很多,考虑优化
对于三个点(x0,y0)(x_0,y_0)(x0​,y0​),(x0,y1)(x_0,y_1)(x0​,y1​),(x0,y2)(x_0,y_2)(x0​,y2​)

如果三个点的方向都是UUU 那么没有必要1→31\to 31→3连边只需要让222作为中转站连边即1→2→31\to 2\to 31→2→3连边即可。

这样边数就是线性的。

upd:向上面建图不难发现每个点只会和启动它的点连一条边,因此边数是O(n)O(n)O(n)量级的

#include<bits/stdc++.h>
using namespace std;
constexpr int N=100010;
struct node
{int x,y;char d;
}a[N];
int b[2*N],n,m;
vector<pair<int,int> > gx[2*N];
vector<pair<int,int> > gy[2*N];
long long d[N];
long long T;
bool vis[N];
void dijkstra()
{priority_queue<pair<long long,int>,vector<pair<long long,int>>,greater<pair<long long,int>>>q;memset(d,0x3f,sizeof d);q.push({0,1});d[1]=0;while(q.size()){int u=q.top().second; q.pop();if(vis[u]) continue;vis[u]=1;if(a[u].d=='U'){vector<pair<int,int> >::iterator it=lower_bound(gx[a[u].x].begin(),gx[a[u].x].end(),(pair<int,int>){a[u].y,u});++it;while(it!=gx[a[u].x].end()){int v=it->second;if(d[v]>d[u]+b[a[v].y]-b[a[u].y]){d[v]=d[u]+b[a[v].y]-b[a[u].y];q.push({d[v],v});}if(a[v].d=='U') break;it++;}}if(a[u].d=='D'){vector<pair<int,int> >::iterator it=lower_bound(gx[a[u].x].begin(),gx[a[u].x].end(),(pair<int,int>){a[u].y,u});if(it==gx[a[u].x].begin()) continue;--it;while(1){int v=it->second;if(d[v]>d[u]-b[a[v].y]+b[a[u].y]){d[v]=d[u]-b[a[v].y]+b[a[u].y];q.push({d[v],v});}if(a[v].d=='D') break;if(it==gx[a[u].x].begin()) break;it--;}}if(a[u].d=='R'){vector<pair<int,int> >::iterator it=lower_bound(gy[a[u].y].begin(),gy[a[u].y].end(),(pair<int,int>){a[u].x,u});++it;while(it!=gy[a[u].y].end()){int v=it->second;if(d[v]>d[u]+b[a[v].x]-b[a[u].x]){d[v]=d[u]+b[a[v].x]-b[a[u].x];q.push({d[v],v});}if(a[v].d=='R') break;it++;}}if(a[u].d=='L'){vector<pair<int,int> >::iterator it=lower_bound(gy[a[u].y].begin(),gy[a[u].y].end(),(pair<int,int>){a[u].x,u});if(it==gy[a[u].y].begin()) continue;--it;while(1){int v=it->second;if(d[v]>d[u]-b[a[v].x]+b[a[u].x]){d[v]=d[u]-b[a[v].x]+b[a[u].x];q.push({d[v],v});}if(a[v].d=='L') break;if(it==gy[a[u].y].begin()) break;it--;}}}
}
int main()
{cin>>n>>T;for(int i=1;i<=n;i++){int x,y;char d;cin>>x>>y>>d;a[i]={x,y,d};b[++m]=x;b[++m]=y;}sort(b+1,b+1+m);m=unique(b+1,b+1+m)-b-1;for(int i=1;i<=n;i++){a[i].x=lower_bound(b+1,b+1+m,a[i].x)-b;a[i].y=lower_bound(b+1,b+1+m,a[i].y)-b;}for(int i=1;i<=n;i++){gx[a[i].x].push_back({a[i].y,i});gy[a[i].y].push_back({a[i].x,i});}for(int i=1;i<=m;i++) {sort(gx[i].begin(),gx[i].end());sort(gy[i].begin(),gy[i].end());}dijkstra();for(int i=1;i<=n;i++){if(d[i]==0x3f3f3f3f3f3f3f3f||T<=d[i])cout<<b[a[i].x]<<' '<<b[a[i].y]<<'\n';else{long long x=b[a[i].x],y=b[a[i].y];if(a[i].d=='U') y+=T-d[i];if(a[i].d=='D') y-=T-d[i];if(a[i].d=='R') x+=T-d[i];if(a[i].d=='L') x-=T-d[i];cout<<x<<' '<<y<<'\n';}}return 0;
}

想到做法了,但是以为可能还有数据能把边卡到2次方,就帮队友调题去了~~非常可惜

codeforces gym100959 I - Robots(稠密图建图优化)相关推荐

  1. Robots on a Grid CodeForces - 1335F(拓扑排序+正反建图+判环)

    There is a rectangular grid of size n×m. Each cell of the grid is colored black ('0') or white ('1') ...

  2. POJ2446【建图建图】

    题意: 给你一个n*n的矩阵,然后再给你几个坑,然后问你能否被1*2的长方形给覆盖: -弱知道了是二分匹配的做法,但是弱还是不会转化,又是在建图上GG了 分析: 从国际象棋的那个黑白色理解,这是一张二 ...

  3. 基于视觉语义信息的建图与定位综述

    点云PCL免费知识星球,点云论文速读. 文章:Semantic Visual Simultaneous Localization and Mapping: A Survey 作者:Kaiqi Chen ...

  4. CodeForces - 1529F It‘s a bird! No, it‘s a plane! No, it‘s AaParsa!(最短路+思维建图)

    题目链接:点击查看 题目大意:给出 nnn 个点(从 000 开始编号)和 mmm 条边的有向带权图,不过 mmm 条边是动态的,经过 ttt 秒后,第 iii 条边就从 ai−>bi,cia_ ...

  5. RealSenseD435与ORB-SLAM2实现稠密建图

    一.RealSenseD435介绍 RealSenseD435是一款结构光相机,使用左右目相机和红外光实现测距.有效测距范围为0.2~10m 二.ORBSLAM2_with_pointcloud_ma ...

  6. TANDEM 基于深度多视图立体视觉的实时跟踪和稠密建图

    点云PCL免费知识星球,点云论文速读. 文章:TANDEM: Tracking and Dense Mapping in Real-time using Deep Multi-view Stereo ...

  7. Codeforces 786B Legacy (线段树优化建图)

    Codeforces 786B Legacy (线段树优化建图) 题意:\(n\)个点,有\(3\)种连边操作:1.将\(u\)指向\(v\):2.将\(v\)指向编号在区间\([l,r]\)的点:3 ...

  8. CodeForces - 786BLegacy——线段树建图+最短路

    [题目描述] CodeForces - 786BLegacy [题目分析] 题目大概意思就是有三种操作: 从某个点到另一个点 从某个点到另一个区间 从某个区间到另一个点 然后询问从其中一个点到其他所有 ...

  9. 视觉SLAM笔记(63) RGB-D 稠密建图

    视觉SLAM笔记(63) RGB-D 稠密建图 1. 建立点云地图 2. 点云地图 3. 其他重建方法 1. 建立点云地图 所谓点云,就是由一组离散的点表示的地图 最基本的点包含 x, y, z 三维 ...

最新文章

  1. python实现列表去重_python实现七种列表去重方法
  2. Spring中基于Java的配置@Configuration和@Bean用法
  3. MySQL DELETE 语句的一个简单介绍
  4. 如何写出安全的API接口
  5. Peacock:大规模主题模型及其在腾讯业务中的应用-2015
  6. 总谐波失真80_如何将总谐波失真降至 10% 以下
  7. 惠普微型计算机w7系统,惠普笔记本电脑一键重装系统win7
  8. 地域和地方的区别_经济区域和区域经济的区别和联系是什么
  9. 计算机运算器由什么组成部分,什么是运算器_运算器由什么组成
  10. python实现视频分割
  11. swoole http请求出现1004 1005报错
  12. vue 脚手架 图片预加载
  13. 使用JS实现俄罗斯方块游戏
  14. lego-loam学习笔记(一)
  15. 【C#】控制台应用程序闪退解决方法
  16. 商业软件的注册码激活码的实现方法及代码示例(收藏备用)
  17. Spring事务传播属性有那么难吗?看这一篇就够了
  18. 【C/C++】日常学习5
  19. USB PD3.0 PPS (Programmable Power Supply)
  20. 开源社邀请您参加亚洲自由开源软件峰会2022 (FOSSASIA SUMMIT 2022)

热门文章

  1. html5 获取文件属性,H5新属性--file文件读取
  2. mockito mock void方法_使用 Junit + Mockito 实践单元测试!
  3. mongorepository查询条件_MongoRepository实现增删改查和复杂查询【支持的查询类型】...
  4. python 为什么动态语言图片_聊聊动态语言那些事(Python)
  5. 如何把python文件发给别人没_如何把自己写的python程序给别人用
  6. 算法设计与分析———动态规划———最大子段和
  7. leetcode429. N 叉树的层序遍历(层序遍历05)
  8. 7-5 流水作业调度 (10 分)(思路+详解+johnson解析)Come Baby!!!!!!!!!!
  9. C++分析使用拷贝控制成员和调用构造函数的时机
  10. 自动备份html文件,windows下定期自动备份本地文件(文件夹)