UVA 11165 - Galactic Travel

题目链接

题意:给定一些不能走的边,要求出从s到t的最短路

思路:由于点数多,直接广搜会超时,所以加上优化,已经找过的点就不在重复找了,这点可以利用并查集进行优化,然后对于每个点的每个不能走的区间,可以先排序,然后利用twopointer的性质,每次可以从上次找到的位置往后找即可

代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;const int N = 100005;int t, n, m, parent[N], vis[N];int find(int x) {return x == parent[x] ? x : parent[x] = find(parent[x]);
}struct Ban {int v1, v2;Ban(int v1, int v2) {this->v1 = v1;this->v2 = v2;}
};bool cmp(Ban a, Ban b) {return a.v1 < b.v1;
}vector<Ban> b[N];const int INF = 0x3f3f3f3f;int bfs(int s, int t) {queue<int> Q;Q.push(s);vis[s] = 0;while (!Q.empty()) {int u = Q.front();Q.pop();if (u == t) return vis[u];int v = find(0);int s = 0;while (v < n) {if (v == u) v = find(v + 1);else {int flag = 1;for (int i = s; i < b[u].size(); i++) {if (b[u][i].v1 <= v && b[u][i].v2 >= v) {flag = 0;v = find(b[u][i].v2 + 1);s = i + 1;break;}}if (flag) {vis[v] = vis[u] + 1;Q.push(v);parent[v] = find(v + 1);v = find(v);}}}}return -1;
}int main() {int cas = 0;scanf("%d", &t);while (t--) {scanf("%d%d", &n, &m);for (int i = 0; i <= n; i++) {parent[i] = i;b[i].clear();}int u, v1, v2;while (m--) {scanf("%d%d-%d", &u, &v1, &v2);if (v1 > v2) swap(v1, v2);b[u].push_back(Ban(v1, v2));}for (int i = 0; i < n; i++)sort(b[i].begin(), b[i].end(), cmp);int s, t;scanf("%d%d", &s, &t);printf("Case #%d: ", ++cas);int tmp = bfs(s, t);if (tmp == -1) printf("Impossible\n");else printf("%d\n", tmp);}return 0;
}

UVA 11165 - Galactic Travel(BFS+twopointer+并查集)相关推荐

  1. LeetCode 886. 可能的二分法(着色DFS/BFS/拓展并查集)

    文章目录 1. 题目 2. 解题 2.1 DFS 2.2 BFS 2.3 并查集 1. 题目 给定一组 N 人(编号为 1, 2, -, N), 我们想把每个人分进任意大小的两组. 每个人都可能不喜欢 ...

  2. 小花梨判连通(DFS或BFS或并查集+vector+map)——“美登杯”上海市高校大学生程序设计邀请赛 (华东理工大学)

    (https://acm.ecnu.edu.cn/contest/173/problem/C/) 题目大意: 小花梨给出?个点,让?位同学对这?个点任意添加无向边,构成?张图.小花梨想知道对于每个点? ...

  3. LeetCode 1319. 连通网络的操作次数(BFS/DFS/并查集)

    文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 2.3 并查集 1. 题目 用以太网线缆将 n 台计算机连接成一个网络,计算机的编号从 0 到 n-1. 线缆用 connection ...

  4. 第 254 场力扣周赛(KMP、贪心、快速幂、二分+多源bfs、并查集 + 时光倒流)

    第 254 场力扣周赛 稀里糊涂双眼双眼惺忪的做了三道,错了4次...还是600来名 5843. 作为子字符串出现在单词中的字符串数目 题目描述 给你一个字符串数组 patterns 和一个字符串 w ...

  5. L2-026 小字辈——BFS DFS 并查集-三种方法

    输入格式: 输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) -- 简单起见,我们把家族成员从 1 到 N 编号.随后第二行给出 N 个编号,其中第 i 个编号对应第 i 位成员的 ...

  6. HDU - 5441 Travel 离线处理+并查集

    题意 给我们一个图 给出这个图的n个点 和m个边和权值 然后再分别给我们q个查询 每个查询给一个x 让我们在这个图中找出多少个不同的有序对 使得从x到y的最大权值不超过x n≤20000,m≤1000 ...

  7. HDU5441 Travel 有秩并查集

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5441 Travel Time Limit: 1500/1000 MS (Java/Others)     ...

  8. 【CodeForces - 616C】The Labyrinth(bfs,并查集,STLset)

    题干: 求每个*能够到达的格子数量,只有.可以走(四个方向扩展),结果mod 10,替换 * 后输出. Input The first line contains two integers n, m  ...

  9. HDU1181:变形课(并查集 + DFS + BFS)

    变形课 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Total Submissi ...

最新文章

  1. 2022-02-07
  2. python 分析两组数据的差异_R语言limma包差异基因分析(两组或两组以上)
  3. AjaxPost、冒泡示例
  4. leetcode695:DFS 岛屿最大面积(C语言)
  5. window snmp服务开启及测试
  6. linux 查询 lib信息,linux系统信息常用查询命令
  7. python做var模型_【Python金融量化】VaR系列(五):Copula模型估计组合VaR
  8. 苹果无人车四个最新专利:手势控制变道、车辆导流、路况感知及车辆控制
  9. Android JSON 数据解析 之原生 API
  10. IDEA 切换黑色主题
  11. 计算机软件系统管理说课,计算机软件系统 说课稿
  12. 算法复杂度和合并果子题解
  13. 手机打电话的通讯原理
  14. Buffer基本使用
  15. 马哥教育SRE笔记【作业】week05
  16. 搭建SSH,SSZ架构需注意数据库的编码问题
  17. ES 索引创建及查询
  18. python 读写h5py文件(转载)
  19. 大数据要学什么?看看这份大数据课程大纲
  20. 军工科研质量管理软件全面支持GJB5000A

热门文章

  1. URP——着色器和材质——复杂光照Complex Lit
  2. MPEG4 笔记2(FTYP,MOOV,MVHD)
  3. LabVIEW控制Arduino流水灯(基础篇—3)
  4. Syncthing局域网配置设备连接同步文件
  5. C++ 20 新特性简介
  6. 新手!亚马逊店铺刚下来就被封,什么原因
  7. 整理任正非思想:要建立一个均衡的平台-1995
  8. 【架构师】零基础到精通——康威定律
  9. pixi.js 总结
  10. 到底怎样才能学好Python