当前位置: 首页 > news >正文

基于倍增的LCA + kruskal重构树 + 并查集

P2245 星际导航

//基于倍增的LCA + kruskal重构树 + 并查集
#include<bits/stdc++.h>
#define endl '\n'
#define rep(_start_,_end_) for(int i =  _start_;i <= (_end_);i ++)
#define all0(x) (x).begin(),(x).end()
#define all1(x) (x).begin() + 1,(x).end()
using namespace std;
using ll = long long;const int N = 1e5 + 10; // 原图最大顶点数
const int M = 5e5 + 10; // 原图最大边数int n, m, q;
int par[N * 2];
int val[N * 2];//非叶子的权值
vector<int>trie[N * 2];struct EDGE
{int u, v, w;
};int Find(int x)
{return (par[x] == x) ? x : par[x] = Find(par[x]);
}
int new_node;
void build_kruskal(vector<EDGE>&edge)
{//初始化for(int i = 1;i <= 2 * n - 1;i ++)par[i] = i;//遍历所有边new_node = n;for(auto &[l,r,w] : edge){int rootl = Find(l);int rootr = Find(r);if(rootl != rootr){new_node ++;val[new_node] = w;
//			cout << "newnode: "<<new_node <<endl;trie[new_node].push_back(rootl);trie[new_node].push_back(rootr);par[rootl] = new_node;par[rootr] = new_node;}}
}int dep[N * 2],fa[N * 2][20];void dfs(int u,int u_father)
{dep[u] = dep[u_father] + 1;fa[u][0] = u_father;for(int j = 1;j <= 19;j ++){fa[u][j] = fa[fa[u][j - 1]][j - 1];}for(auto v:trie[u]){if(v != u_father){dfs(v,u);}}
}int get_lca(int l,int r)
{if(dep[l] < dep[r])swap(l,r);for(int i = 19;i >= 0;i --){if(dep[fa[l][i]] >= dep[r])l = fa[l][i];}if(l == r)return l;for(int i = 19;i >= 0;i --){if(fa[l][i] != fa[r][i])l = fa[l][i],r = fa[r][i];}return fa[l][0];
}void solve()
{cin >> n >> m; vector<EDGE> edge(m);rep(0, m - 1) cin >> edge[i].u >> edge[i].v >> edge[i].w;sort(all0(edge), [](const auto&i, const auto&j){return i.w < j.w;});//重构树build_kruskal(edge);//预处理dfsfor(int i = 1;i <= new_node ;i ++){if(par[i] == i){dfs(i,0);}}
//	for(int i = 1;i <= 2 * n - 1;i ++)cout << fa[i][0]<<" ";
//	cout << endl;cin >> q;while(q --){int l,r;cin >> l >> r;if(Find(l) != Find(r))cout << "impossible"<<endl;else{cout << val[get_lca(l,r)] <<endl;}}
}int main()
{ios_base::sync_with_stdio(false);cin.tie(NULL);int t;// cin >> t;t = 1;while(t --){solve();}return 0;
}

http://www.dtcms.com/a/310675.html

相关文章:

  • 可编辑234页PPT | 某制造集团供应链流程分析和数字化转型解决方案
  • JavaScript 语句和函数
  • ensp防火墙安全策略实验
  • 【全网首个公开VMware vCenter 靶场环境】 Vulntarget-o 正式上线
  • Linux权限提升
  • shell编程练习,实现循环创建账户、测试主机连通性、批量修改主机root密码等功能
  • Linux 用户与组管理:从配置文件到实操命令全解析
  • Lecture 7: Processes 4, Further Scheduling
  • 嵌入式系统中常用通信协议
  • 高压大电流与低压大电流电源的设计难点
  • QT中重写事件过滤失效(返回了多个事件)
  • Jetpack Compose Column组件之focusProperties修饰符
  • 基于C#和NModbus4库实现的Modbus RTU串口通信
  • 【工具分享】模拟接口请求响应的Chrome插件ModResponse
  • 光伏运维数据透明化,发电量提高45%
  • Cursor免费使用工具
  • 配置多数据源dynamic-datasource 开箱即用方案​
  • ubuntu使用man手册中文版办法
  • 同品牌的系列广告要如何保证宣传的连贯性?
  • C语言(02)——标准库函数大全(持续更新)
  • 精品可编辑PPT | 集团整体架构与商务智能解决方案
  • Klipper-配置解析
  • 「一键召唤 007」:开源多智能体 JoyAgent-JDGenie 如何让你的 AI 产品从 Demo 到 真香 只差 Ctrl+C / Ctrl+V?
  • 电商客服协同中,智能处理哪些问题,人工专攻哪些需求?
  • 日志管理工具 ——ELK Stack
  • 开源工具FossFLOW,绘制技术图表
  • 告别软件残留!IObit Uninstaller Pro 让电脑彻底干净!
  • GPS定位 JT808 / 视频监控 - JT1078 技术剖析(1)
  • 《文明5》错误代码0xc0000142修复方法
  • JavaScript 中的 new 关键字和函数调用方法详解,apply、call 和 bind 的区别