HDU 2586 How far away? LCA模板
来源:互联网 发布:nginx php exec 权限 编辑:程序博客网 时间:2024/05/22 04:25
给一棵树,若干个查询,每次查询树上两点的距离。第一道LCA的题..完全是裸的,把查询存起来,直接tarjan就可以。res[i][0],res[i][1],res[i][2]分别表示第i个查询的起点,终点和起点终点的最近公共祖先,记dis[x]为x到根节点的距离,那么dis(0,1)就是dis[0]+dis[1]-2*dis[2].
#include <iostream>#include <cstdio>#include <algorithm>#include <memory.h>#include <cmath>using namespace std;typedef long long ll;const int maxn=40000+40;struct node{ int w,v; int next;}edge[maxn<<1],query[500];bool vis[maxn];int g[maxn],gg[maxn];int res[maxn][3];int m,n,k,p,q;int en,eq;int test;int fa[maxn];int dis[maxn];int find(int x){ if (x!=fa[x]) return fa[x]=find(fa[x]); return x;}void tarjan(int u){ vis[u]=true; fa[u]=u; for (int j=gg[u]; j!=-1; j=query[j].next) { if (vis[query[j].v]) { res[query[j].w][2]=find(query[j].v); } } for (int j=g[u]; j!=-1; j=edge[j].next) { if (!vis[edge[j].v]) { dis[edge[j].v]=dis[u]+edge[j].w; tarjan(edge[j].v); fa[edge[j].v]=u; } }}int main(){// freopen("in.txt","r",stdin); scanf("%d",&test); while (test--) { memset(vis,false,sizeof vis); memset(dis,0,sizeof dis); scanf("%d",&n); scanf("%d",&m); memset(g,-1,sizeof g); memset(gg,-1,sizeof gg); en=eq=0; int x,y,z; for (int i=1; i<n; i++) { scanf("%d%d%d",&x,&y,&z); edge[en].w=z; edge[en].v=y; edge[en].next=g[x]; g[x]=en; en++; edge[en].w=z; edge[en].v=x; edge[en].next=g[y]; g[y]=en; en++; } for (int i=1; i<=m; i++) { scanf("%d%d",&x,&y); query[eq].v=y; query[eq].w=i; query[eq].next=gg[x]; gg[x]=eq; eq++; query[eq].v=x; query[eq].w=i; query[eq].next=gg[y]; gg[y]=eq; eq++; res[i][0]=x; res[i][1]=y; } dis[1]=0; tarjan(1); for (int i=1; i<=m; i++) { cout<<dis[res[i][0]]+dis[res[i][1]]-2*dis[res[i][2]]<<endl; } } return 0;}
0 0
- HDU 2586 How far away? LCA模板
- HDU 2586 How far away LCA倍增模板
- HDU 2586 How far away ? (离线LCA Tarjan算法模板)
- hdu 2586 How far away LCA在线RMQ(模板题)
- HDU 2586 How far away?(lca模板)
- HDU 2586 How far away ?(LCA模板题)
- hdu 2586 How far away ? LCA 模板题
- Hdu 2586 How far away ?【倍增LCA模板记录】
- HDU 2586 - How far away ? (LCA)
- hdu 2586 How far away ?(LCA)
- HDU--2586--How far away ?【LCA】
- HDU 2586 How far away ?(LCA)
- hdu 2586 How far away ?(LCA)
- hdu 2586 How far away ?(LCA)
- HDU - 2586 How far away ?(LCA)
- How far away ? (hdu 2586 LCA)
- hdu 2586 How far away ?(LCA)
- HDU---2586-How far away(LCA)
- 【收藏汇总】
- RTSP协议转换RTMP直播协议
- 史上最全设计模式导学目录(完整版)
- spring事务管理源码分析
- 从C到C++
- HDU 2586 How far away? LCA模板
- 微软重组战略初显成效 Surface胡汉三卷土重来
- 实现输出h264直播流的rtmp服务器
- [BFS]HOJ1440Knight Moves
- [hystar整理]Entity Framework 教程
- 左右人生的13条金科玉律
- 查找sqlserver数据库中,某一字段在 哪张表的哪一列中存在
- Stack的三种含义
- 原来青春只是过客