hdu 2586 lca在线算法(朴素算法)
来源:互联网 发布:在线真心话大冒险软件 编辑:程序博客网 时间:2024/05/18 03:09
#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;
}
#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;
}
0 0
- hdu 2586 lca在线算法(朴素算法)
- hdu 2586 LCA在线算法
- hdu 2586 lca-st在线算法
- hdu 2586 How far away ? lca 在线和离线算法
- HDU 2586 最近公共祖先 LCA在线算法
- 【Lca 在线st算法】hdu 2586 How far away ?
- HDU 2874 LCA在线算法RMQ
- LCA在线算法
- LCA 在线算法
- 在线LCA算法
- 在线lca算法模板
- LCA在线算法
- HDU2586【LCA在线算法】
- LCA在线算法
- LCA在线算法ST算法
- LCA在线算法ST算法
- LCA算法-ST在线算法
- HDU 2586 LCA离线算法 tarjan算法
- 一篇文章让你读懂iOS和Android的历史起源
- nyoj 420 p次方求和
- hdu-1181-变形课
- codeforces Paying up 题解
- 用devstack安装Openstack,解决重启无法登陆问题
- hdu 2586 lca在线算法(朴素算法)
- 第九周项目二
- Ubuntu图形界面和console界面转换
- 《世界如此险恶,你要内心强大》读书笔记(一)
- Android中应用的资源
- sqlite3的一些问题
- [Python]heapq 堆模块
- nyoj 122 Triangular Sums
- hdu 3336 Count the string