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

AcWing1171. 距离(lcatarjan)

输入样例1:

2 2 
1 2 100 
1 2 
2 1

输出样例1:

100
100

输入样例2:

3 2
1 2 10
3 1 15
1 2
3 2

输出样例2:

10
25
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+5;
int n,m,x,y,k,res[N];
int vis[N];
int dis[N];
int p[N];
vector<pair<int,int>>query[N],e[N];void dfs(int u,int fa){for(auto it:e[u]){int to=it.first;if(to==fa) continue;dis[to]=dis[u]+it.second;dfs(to,u);}
}
int find(int x){if(p[x]!=x) p[x]=find(p[x]);return p[x];
}
void tarjan(int u){vis[u]=1;for(auto it:e[u]){int to=it.first;if(!vis[to]){tarjan(to);p[to]=u;}}for(auto it:query[u]){int y=it.first;int id=it.second;if(vis[y]==2){int anc=find(y);res[id]=dis[u]+dis[y]-dis[anc]*2;}}vis[u]=2;
}
int main(){scanf("%d%d",&n,&m);for(int i=0;i<n-1;i++){scanf("%d%d%d",&x,&y,&k);e[x].push_back({y,k});e[y].push_back({x,k});}for(int i=0;i<m;i++){scanf("%d%d",&x,&y);if(x!=y){query[x].push_back({y,i});query[y].push_back({x,i});}}for(int i=1;i<=n;i++) p[i]=i;dfs(1,-1);tarjan(1);for(int i=0;i<m;i++) printf("%d\n",res[i]);return 0;
}

http://www.lryc.cn/news/112534.html

相关文章:

  • JVM-运行时数据区
  • RedisTemplate中boundHashOps的使用
  • 计算机网络-性能指标
  • 排序第一课【插入排序】直接插入排序 与 希尔排序
  • 云计算——ACA学习 云计算概述
  • 如何为网站进行全面的整站翻译?
  • 项目部署(前后端分离)
  • 增强型Web安全网关在银行的应用
  • Oracle-ORA-00600:[ktspffbmb:objdchk_kcbnew_3]
  • SPINN:基于设备和云的神经网络协同递进推理
  • 数据结构-二叉树
  • Open3D 进阶(4)高斯混合点云聚类
  • 计算机组成和IO
  • STM32CUBUMX配置RS485 modbus STM32(从机)亲测可用
  • 系统设计类题目汇总
  • css滚动条样式指南
  • vue子组件修改父组件传递的变量(自定义日期时间组件,时间间隔为15分钟或者一个小时)
  • 【PyTorch】nn.Conv2d函数详解
  • 数智保险 创新未来 | GBASE南大通用亮相中国保险科技应用高峰论坛
  • 分布式天梯图算法在 Redis 图数据库中的应用
  • 观察者模式——对象间的联动
  • 【雕爷学编程】Arduino动手做(189)---特别苗条,使用微波传感器控制的纤细小车
  • 机器学习基础算法及其实现
  • docker安装MinIO
  • 第5章 运算符、表达式和语句
  • 24考研数据结构-图的存储结构邻接矩阵
  • 在线推算两个日期相差天数的计算器
  • Spring源码解析(七):bean后置处理器AutowiredAnnotationBeanPostProcessor
  • 【C#学习笔记】引用类型(1)
  • STM32CubeMX+VSCODE+EIDE+RT-THREAD 工程创建