博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 2586 lca在线算法(朴素算法)
阅读量:5106 次
发布时间:2019-06-13

本文共 991 字,大约阅读时间需要 3 分钟。

#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;
}

转载于:https://www.cnblogs.com/thefirstfeeling/p/4410784.html

你可能感兴趣的文章
XML外部实体注入漏洞(XXE)
查看>>
保存页面数据的场所----Hidden、ViewState、ControlState
查看>>
Python3.6全栈开发实例[015]
查看>>
eval函数使用技巧
查看>>
信息安全系统设计基础实验二—20135215黄伟业20135222胡御风
查看>>
Jupyter Notebook 的快捷键
查看>>
实现 页面某些 效果
查看>>
SharePoint Data View Conditional Formatting based on user permissions (IfHasRights)
查看>>
poj_3352 连通图的桥
查看>>
HDOJ HDU 2067 小兔的棋盘 ACM 2067 IN HDU
查看>>
Tomcat在Linux上的安装与配置
查看>>
JAVA一些错误代码
查看>>
使用System.Net.Mail发送邮件
查看>>
mysql索引
查看>>
C# 将文件嵌入DLL 。Log4net 配置
查看>>
路德第五季在线观看迅雷下载
查看>>
Failure Determining if we are running on a domai
查看>>
Java的类的详解
查看>>
ng/cli new skip install and do not create a folder
查看>>
Session的理解
查看>>