题目链接:传送门

kruskal重构树的板子题
和货车运输一样滴
会的可以写这个
我直接改的货车运输当时的倍增lca的代码
思路就是建出最小生成树
因为显然一些边权很大的边是不可能走的
然后倍增维护路径上边权的极值

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <complex>
#include <algorithm>
#include <climits>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <iomanip>
#define A 1000010
#define B 2010using namespace std;
typedef long long ll;
struct node {int next, to, dis;
}edge[A];
struct TO {int x, y, z;friend bool operator < (const TO a, const TO b) {return a.z < b.z;}
}e[A];
int n, m, fa[A], vis[A], f[A][21], w[A][21], dep[A], a, b, c, q, faa[A];
int head[A], num_edge;
void add_edge(int from, int to, int dis) {edge[++num_edge].next = head[from];edge[num_edge].to = to;edge[num_edge].dis = dis;head[from] = num_edge;
}
int find(int x) {if (fa[x] == x) return x;else return fa[x] = find(fa[x]);
}
void kruskal() {for (int i = 1; i <= n; i++) fa[i] = i;sort(e + 1, e + m + 1);int ans = 0;for (int i = 1; i <= m; i++) {int fx = find(e[i].x), fy = find(e[i].y);if (fx == fy) continue;ans++; fa[fx] = fy;add_edge(e[i].x, e[i].y, e[i].z);add_edge(e[i].y, e[i].x, e[i].z);}
}
void dfs(int fr, int val) {w[fr][0] = val;for (int i = 1; i < 20; i++)f[fr][i] = f[f[fr][i - 1]][i - 1], w[fr][i] = max(w[fr][i - 1], w[f[fr][i - 1]][i - 1]);for (int i = head[fr]; i; i = edge[i].next) {int ca = edge[i].to;if (ca == f[fr][0]) continue;f[ca][0] = fr;dep[ca] = dep[fr] + 1;dfs(ca, edge[i].dis);}
}
int lca(int fr, int to) {if (dep[fr] < dep[to]) swap(fr, to);int maxx = 0;for (int i = 0; i < 20; i++)if (((dep[fr] - dep[to]) >> i) & 1)maxx = max(maxx, w[fr][i]), fr = f[fr][i];if (fr == to) return maxx;for (int i = 19; i >= 0; i--)if (f[fr][i] != f[to][i])maxx = max(maxx, max(w[fr][i], w[to][i])), fr = f[fr][i], to = f[to][i];return max(max(w[to][0], w[fr][0]), maxx);
}int main(int argc, char const *argv[]) {scanf("%d%d", &n, &m);for (int i = 1; i <= m; i++) scanf("%d%d%d", &e[i].x, &e[i].y, &e[i].z);kruskal();for (int i = 1; i <= n; i++) f[i][0] = i;for (int i = 1; i <= n; i++)if (i == fa[i])dfs(i, 0);scanf("%d", &q);while (q--) {scanf("%d%d", &a, &b);if (find(a) != find(b)) puts("impossible");else printf("%d\n", lca(a, b));}return 0;
}

Luogu P2245 星际导航相关推荐

  1. P2245 星际导航

    题目描述 sideman 做好了回到Gliese星球的硬件准备,但是sideman的导航系统还没有完全设计好.为了方便起见, 我们可以认为宇宙是一张有N 个顶点和M 条边的带权无向图,顶点表示各个星系 ...

  2. 洛谷P2245 星际导航

    传送门 题目描述 \text{sideman}sideman 做好了回到 \text{Gliese}Gliese 星球的硬件准备,但是 \text{sideman}sideman 的导航系统还没有完全 ...

  3. 洛谷P2245 星际导航(kruskal重构树)

    sideman 做好了回到 \text{Gliese}Gliese 星球的硬件准备,但是 \text{sideman}sideman 的导航系统还没有完全设计好.为了方便起见,我们可以认为宇宙是一张有 ...

  4. 【DP】【树状数组】方伯伯的玉米田/优美玉米(luogu 3287/金牌导航 数据结构优化DP-5)

    正题 luogu 3287 金牌导航 数据结构优化DP-5 题目大意 有n个玉米,给出高度,你可以选择一个区间,使这个区间的玉米高度+1,你可以进行k次这样的操作,查询你操作完后最长不下降子序列最大值 ...

  5. 【DP】【树状数组】免费馅饼(luogu 7302/金牌导航 数据结构优化DP-4)

    正题 luogu 7302 金牌导航 数据结构优化DP-4 题目大意 在坐标轴上会出现n个金币,第i个金币tit_iti​时在wiw_iwi​出现(只出现一个单位时间),价值为sis_isi​,当你t ...

  6. 【DP】【线段树】基站选址(luogu 2605/金牌导航 数据结构优化DP-2)

    正题 luogu 2605 金牌导航 数据结构优化DP-2 题目大意 有若干个村庄在一条直线上,距离第一个村庄did_idi​,在该村庄建立基站要花费cic_ici​,如果在离该村不大于sis_isi ...

  7. 【LCT】城市旅行(luogu 4842/金牌导航 LCT-3)

    正题 luogu 4842 金牌导航 LCT-3 题目大意 给你一棵树,让你进行一些操作: 1.删除一条边 2.连接一条边 3.给一条路径上的点加上x 4.给出一条路径,在该路径选取两个点,求这两个点 ...

  8. 【LCT】弹飞绵羊(luogu 3203/金牌导航 LCT-2)

    正题 luogu 3203 金牌导航 LCT-2 题目大意 给你n个格子,当你在第i个格子时,可以往后跳aia_iai​格,让你进行几下操作: 1.修改第i个数 2.查询在第i个格子跳多少下会跳出界 ...

  9. 【树链剖分】染色(luogu 2486/金牌导航 树链剖分-3)

    正题 luogu 2486 金牌导航 树链剖分-3 题目大意 给你一棵树,让你进行以下操作: 1.把一条路径染上一个颜色 2.查询一条路径上有多少个颜色段 解题思路 用树链剖分把问题转化为链上问题 然 ...

最新文章

  1. HBase中的时间维度
  2. 在html中引入css内部样式表使用,CSS样式学习笔记(三)html文件引入CSS的方法(2)...
  3. Flex里监听mouseDownOutside事件解决弹出窗口点击空白关闭功能
  4. Vue 脚手架中的.eslintrc.js代码规范 的解决
  5. 使用K-Means对美因河畔法兰克福的社区进行聚类
  6. gcc malloc/free的质疑
  7. 《信号与系统》解读 前言:为什么要解读《信号与系统》?
  8. 蓝桥杯2019c语言b组试题,2020年7月B组C++蓝桥杯真题试水
  9. 计算机论文中期考核报告,硕士学位论文中期检查表范文_中期检查报告范文_中期考核 修改论文题目...
  10. ICCV 2017 论文解读集锦
  11. 一文读懂什么是数字证书
  12. 蓝桥杯——大臣的旅费
  13. 做人晶莹剔透,做事水滴石穿
  14. 硬件加密算法HITAG2流程分析
  15. 路在脚下、梦在身上,技能提升不是为了别人!
  16. arduino/Mixly使用ZH03BPM2.5传感器
  17. windows7 64位使用U盘进行系统安装
  18. JavaScript进阶(二)-- DOM基础
  19. BigDecimal 两束运算 保留两位小数
  20. ros学习- Intel RealSense D455接入ros

热门文章

  1. 苹果电脑(mac)上远程连接windows的软件
  2. 蓝宝石RX590GME 8G D5白金版黑苹果免驱成功
  3. MAC M1芯片安装python3.6环境
  4. 中国集装箱涂料行业调研与投资前景研究报告(2022版)
  5. 域名 超过注册日两年_域名到期之后一般可以保留多久?
  6. 国开计算机组成原理边学边练,国家开放大学-计算机组成原理-形考任务-2017全部答案.docx...
  7. 软件 测试员必会英语单词,软件测试人员必备的英语单词(一)
  8. 初学者如何选购第一把吉他?新手注意这几点,告别选择困难!附上10款高性价比入门吉他推荐!
  9. 在 GitHub 玩硬件——GitHub 热点速览 Vol.49
  10. C++小工修炼手册XXVII (二叉搜索树的简单实现以及原理解释)