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

lca(倍增)

例题:https://acm.hdu.edu.cn/showproblem.php?pid=2586

点击查看代码
#include <bits/stdc++.h>using namespace std;const int N = 40010;vector<int> v[N];
vector<int> w[N];int fa[N][31],cost[N][31],dep[N];
int n,m;
int a,b,c;void dfs(int root, int fno){fa[root][0] = fno;dep[root] = dep[fa[root][0]] + 1;for(int i = 1; i < 31; i ++){fa[root][i] = fa[fa[root][i - 1]][i - 1];cost[root][i] = cost[fa[root][i - 1]][i - 1] + cost[root][i - 1];}int sz = v[root].size();for(int i = 0; i < sz; i ++){if(v[root][i] == fno)continue;cost[v[root][i]][0] = w[root][i];dfs(v[root][i],root);}
}int lca(int x,int y){//令 y 比 x 深if(dep[x] > dep[y])swap(x,y);int tmp = dep[y] - dep[x];int ans = 0;for(int j = 0; tmp; j ++, tmp >>= 1){if(tmp & 1) ans += cost[y][j],y = fa[y][j];}if(x == y) return ans;for(int j = 30; j >=0 && y != x; j --){if(fa[x][j] != fa[y][j]){ans += cost[x][j] + cost[y][j];x = fa[x][j];y = fa[y][j];}}//x和y都在lca(x,y)前一步了ans += cost[x][0] + cost[y][0];return ans;
}void solve(){memset(fa,0,sizeof(fa));memset(cost,0,sizeof(cost));memset(dep,0,sizeof(dep));cin >> n >> m;for(int i = 1; i <= n; i ++){v[i].clear();w[i].clear();}for(int i = 1; i <= n - 1; i ++){cin >> a >> b >> c;v[a].push_back(b);v[b].push_back(a);w[a].push_back(c);w[b].push_back(c);}dfs(1,0);for(int i = 0; i < m; i ++){cin >> a >> b;cout << lca(a,b) << '\n';}
}int main(){ios::sync_with_stdio(0);cin.tie(0);int t;cin >> t;while(t --){solve();}return 0;
}
http://www.zskr.cn/news/18107.html

相关文章:

  • BERT模型简化技术提升效率与容量
  • 01-Mybatis实现分页查询(手写)
  • 详细介绍:K8s实践中的重点知识
  • VUE---await的运用
  • 新手报道
  • VS Code保存.vue文件自动格式化标签的问题
  • 基于最小二乘(LS)信道估计的MATLAB实现
  • 让老弟做个数据同步,结果踩了 7 个大坑!
  • aardio在控件事件里获取控件ui自身对象
  • 2025机械加工厂家实力排行榜:技术精度与供货效率权威测评
  • mergeGDS
  • 深入解析:设计模式(C++)详解——命令模式(2)
  • MySQL数据库入门指南,5分钟掌握连接与基础操作命令
  • 大规模图神经网络高效训练新方法
  • cocos3节点监听不到TOUCH_START问题
  • 10 10
  • Gitee DevOps平台:中国企业数字化转型的加速器
  • 全社会是否真的需要一套AI元人文实践框架?
  • 2025人工智能在无人机数据处理中的应用
  • 高性能场景为什么推荐使用PostgreSQL,而非MySQL?
  • 【EI期刊、EI-JA检索】第五届新能源与电力工程国际学术会议(ICNEPE 2025)
  • 告别普通游客照:在线P图让你的社交媒体脱颖而出
  • aardio编程中的常量
  • 半导体行业文件摆渡系统:守护核心数据安全,赋能高效协同!
  • 偏微分方程数值解法
  • 电商-数据库分库分表方案 - 努力-
  • Linux设置分辨率(临时)
  • git克隆代码保留提交记录,从源仓库迁移到新仓库地址
  • 基于Java+Springboot+Vue开发的旅游景区管理系统源码+运行步骤
  • MySQL从入门到熟练查询