HDU2586
来源:互联网 发布:激战2人类女捏脸数据库 编辑:程序博客网 时间:2024/06/06 02:44
#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<algorithm>using namespace std;#define MAXN 40040int head[MAXN],tot,dis[MAXN],n,m;struct Edge{ int value,to,next; }e[MAXN<<2];int dep[MAXN],son[MAXN],siz[MAXN],fa[MAXN],top[MAXN];inline void prepare(){ memset(dis,0,sizeof dis ); tot=0; memset(head,0,sizeof head ); memset(son,0,sizeof son ); memset(dep,0,sizeof dep ); memset(fa,0,sizeof fa );}inline int read(int &x){ x=0; int f=1; char c=getchar(); while(c>'9'||c<'0'){ if(c=='-') f=-1; c=getchar(); } while(c>='0'&&c<='9'){ x=x*10+c-'0'; c=getchar(); } x*=f;}inline void Add_Edge(int u,int v,int w){ e[++tot].to=v; e[tot].value=w; e[tot].next=head[u]; head[u]=tot;}void DFS_1(int u,int father,int deepth){ dep[u]=deepth,siz[u]=1,fa[u]=father; for(int i=head[u];i;i=e[i].next){ int v=e[i].to; if(v==father) continue; dis[v]=e[i].value+dis[u]; DFS_1(v,u,deepth+1); siz[u]+=siz[v]; if(!son[u]||siz[son[u]]<siz[v]) son[u]=v; }}void DFS_2(int u,int Top){ top[u]=Top; if(son[u]) DFS_2(son[u],Top); for(int i=head[u];i;i=e[i].next){ int v=e[i].to; if(v==fa[u]||v==son[u]) continue; DFS_2(v,v); }}inline int Get_LCA(int u,int v){ while(top[u]!=top[v]){ if(dep[top[u]]<dep[top[v]]) swap(u,v); u=fa[top[u]]; } if(dep[u]>dep[v]) swap(u,v); return u;}int main(){ int T; read(T); while(T--){ prepare(); read(n),read(m); for(int u,v,w,i=1;i<=n-1;++i){ read(u),read(v),read(w); Add_Edge(u,v,w);Add_Edge(v,u,w); } DFS_1(1,0,1); DFS_2(1,1); for(int u,v,i=1;i<=m;++i){ read(u),read(v); int lca=Get_LCA(u,v); printf("%d\n",dis[u]+dis[v]-dis[lca]-dis[lca]); } } return 0;}
阅读全文
0 0
- hdu2586
- HDU2586
- hdu2586
- HDU2586
- hdu2586
- hdu2586 LCA
- hdu2586(LCA)
- hdu2586 lca
- hdu2586 LCA模板
- hdu2586 lca_tarjan的应用
- HDU2586 离线tarjan LCA
- HDU2586 How far away ?
- HDU2586 How far away ?
- hdu2586【How far away ?】
- hdu2586 LCA 离线算法
- HDU2586【LCA在线算法】
- LCA Tarjan模板 HDU2586
- hdu2586 lca+rmq
- 【c#】验证SQL语法是否正确
- 洛谷 P1967 货车运输
- 计算表达式的值
- MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突
- 《剑指Offer》做题总结(二)
- HDU2586
- 2017.8.20------二维树状数组的求和问题
- 系统分区——Linux使用教程(一)
- 剑指offer_二叉树---二叉树的镜像
- 解决mysql不能远程连接的问题
- 杭电2063 过山车
- 2017年8月写给自己的一封信-yellowcong
- [数据结构]javascript实现二叉查找树
- Executor和线程池