hdu 2586 lca在线算法(朴素算法)
#include<stdio.h>
#include<string.h>//用c/c++会爆栈,用g++ac
#define inf 0x3fffffff
#define N 41000
struct node {
int u,v,w,next;
}bian[N*2];
int head[N],yong;
int pre[N],dis[N],deep[N];
void addedge(int u,int v,int w) {
bian[yong].u=u;
bian[yong].v=v;
bian[yong].w=w;
bian[yong].next=head[u];
head[u]=yong++;
}
void dfs(int s,int h,int pr){
int i;
deep[s]=h+1;
for(i=head[s];i!=-1;i=bian[i].next) {
if(bian[i].v!=pr) {
pre[bian[i].v]=s;
dis[bian[i].v]=dis[s]+bian[i].w;
dfs(bian[i].v,h+1,s);
}
}
return ;
}
int lca(int u,int v) {
if(u==v)
return u;
if(deep[u]>deep[v])
return lca(pre[u],v);
return lca(u,pre[v]);
}
int main() {
int n,m,i,u,v,w,t;
scanf("%d",&t);
while(t--) {
scanf("%d%d",&n,&m);
memset(head,-1,sizeof(head));
yong=0;
for(i=1;i<n;i++) {
scanf("%d%d%d",&u,&v,&w);
addedge(u,v,w);
addedge(v,u,w);
}
dis[1]=0;
dfs(1,-1,1);
while(m--) {
scanf("%d%d",&u,&v);
w=lca(u,v);
printf("%d\n",dis[u]+dis[v]-2*dis[w]);
}
}
return 0;
}
最新文章
- 转!!MySQL中的存储引擎讲解(InnoDB,MyISAM,Memory等各存储引擎对比)
- 深入理解openstack网络架构(3)-----路由
- ActiveMQ(八)_多集群的负载均衡
- centos python2.6升级到2.7 还有单独的python3.5环境
- [zt]OpenCV2.1.0的安装
- mstsc命令详解
- Eclipse中安装使用SVN
- tungsten开机启动及进程开启停止
- 学生管理系统(list)
- 【★】EIGRP终极解析!
- 微信小程序点击返回顶层实现方法
- C++类与对象(05)
- awk删除重复文件
- nginx1.14.0版本负载均衡配置
- Java学习笔记一:数据类型I
- MyEclipse配置tomcat报错 - java.lang.UnsupportedClassVersionError: org/apache/lucene/store/Directory : Unsupported major.minor version 51.0
- Java中 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的概念(转)
- [转] HTML5 Blob与ArrayBuffer、TypeArray和字符串String之间转换
- 10、jQuery初识
- Gym100340 线性dp
热门文章
- HDU5526/BestCoder Round #61 (div.1)1004 Lie 背包DP
- Codeforces Round #332 (Div. 2)C. Day at the Beach 树状数组
- SuperSocketClientEngine
- 解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合”
- Codeforces--630I--Parking Lot(规律)
- java 分布式锁
- Android单选中listview中的一项
- (Go)08.time示例
- go之变量、指针、引用地址
- flash 遮住 div 解决办法