图论之离线lca模板
2015-07-18 14:05
399 查看
#include <cstdio> #include <cstring> #include <vector> #include <algorithm> using namespace std; #define MEM(a,b) memset(a,b,sizeof(a)); const int N=100010; int n,m; struct Edge{ int u,v,w,next; }edge[2*N],Q ; int fa ,dis ; bool vis ; int cnt,qcnt; int head ,qhead ; void addedge(int u,int v,int w){ edge[cnt].u=u;edge[cnt].v=v;edge[cnt].w=w;edge[cnt].next=head[u]; head[u]=cnt++; } void addQ(int u,int v){ Q[qcnt].v=v;Q[qcnt].next=qhead[u];qhead[u]=qcnt++; } void tarjan(int x){ fa[x]=x; vis[x]=1; for(int i=head[x];i!=-1;i=edge[i].next){ int v=edge[i].v; if(!vis[v]){ dis[v]=dis[x]+edge[i].w; tarjan(v); fa[v]=x;//向上合并 } } for(int i=qhead[x];i!=-1;i=Q[i].next){ int v=Q[i].v; if(vis[v]){ Q[i].w=dis[x]+dis[v]-2*dis[root(v)]; Q[i^1].w=Q[i].w; } } } int main() { cnt=0;qcnt=0; memset(head, -1, sizeof(head)); memset(qhead, -1, sizeof(qhead)); memset(vis,0,sizeof(vis)); memset(dis,0,sizeof(dis)); memset(fa,-1,sizeof(fa)); tarjan(1); return 0; }
相关文章推荐
- pytnon DES加密CBC模式
- 离散化+BFS HDOJ 4444 Walk
- 【Go语言】【15】GO语言的面向对象
- 【Go语言】【15】GO语言的面向对象
- Android开发者指南(6) —— AIDL
- Leetcode: Lowest Common Ancestor of a Binary Search Tree
- ScheduleFactory(不同scheduler name)
- jQuery之常用且重要方法梳理(siblings,nextAll,end,wrap,apply,call,each)-(二)
- 接Android外包
- jQuery对象和DOM对象,注意字体部分
- 图论之2-sat模板
- java新手笔记8 包
- ScheduleJobFactory
- hdu 2045 递推 不容易系列之(3)—— LELE的RPG难题
- 《App研发录》 源码
- 项目管理 BUG管理 —— 禅
- VS2008中关于“加载安装组件时遇到问题。取消安装”的解决
- bzoj 1012 维护一个单调数列
- JS高级程序设计11-DOM扩展
- Delphi 遍历所有目录和子目录下的文件名(可按后缀名遍历)