LCA
来源:互联网 发布:博格巴 知乎 编辑:程序博客网 时间:2024/05/21 21:01
//方法一 vector<int>G[MAX_N];//输入 图的邻接表 int root;//根节点int parent[MAX_N];//父亲节点 int depth[MAX_N];//节点深度 void dfs(int v,int p,int d){parent[v]=p;depth[v]=d;for(int i=0;i<G[v].size();i++)if(G[v][i]!=p)dfs(G[v][i],v,d+1);} void init(){dfs(root,-1,0);}int LCA(int u,int v){while(depth[u]>depth[v])u=parent[u];while(depth[v]>depth[u])v=parent[v];while(u!=v){u=parent[u];v=parent[v];}}//方法二vector<int>G[MAX_N];int root;int parent[MAX_LOG_N][MAX_N]; int depth[MAX_N];void dfs(int v,int p,int d){parent[0][v]=p;depth[v]=d;for(int i=0;i<G[v].size();i++)if(G[v][i]!=p)dfs(G[v][i],v,d+1);}void init(int V){dfs(root,-1,0);for(int k=0;k+1<MAX_LOG_N;k++){for(int v=0;v<V;v++){if(parent[k][v]<0)parent[k+1][v]=-1;elseparent[k+1][v]=parent[k][parent[k][v]];}}}int LCA(int u,int v){if(depth[u]>depth[v])swap(u,v);for(int k=0;k<MAX_LOG_N;k++){if(depth[v]-depth[u]>>k&1)v=parent[k][v];}if(u==v)return u;for(int k=MAX_LOG_N;k>=0;k--){if(parent[k][u]!=parent[k][v]){u=parent[k][u];v=parent[k][v];}}return parent[0][u];}//方法三vector<int>G[MAX_N];int root;int vs[MAX_N*2-1]; //dfs访问的顺序int depth[MAX_N*2-1];int id[MAX_N]; // 各个顶点在vs中首次出现的下标void dfs(int v,int p,int d,int &k){id[v]=k;vs[k]=v;depth[k++]=d;for(int i=0;i<G[v].size();i++){if(G[v][i]!=p){dfs(G[v][i],v,d+1,k);vs[k]=v;depth[k++]=d;} }} void init(int V){int k=0;dfs(root,-1,0,k);rmq_init(depth,V*2-1);}int LCA(int u,int v){return vs[query(min(id[u],id[v]),max(id[u],id[v])+1);}
0 0
- LCA
- LCA
- lca
- LCA
- LCA
- lca
- LCA
- LCA
- LCA
- LCA
- LCA
- lca
- lca
- LCA
- lca
- LCA
- LCA
- LCA
- Spring问题笔记(一):prototype类型bean的destroy-method问题
- <a>标签中href="javascript:;"的作用
- kubernetes高级调度特性
- input 随其内容而变化长度
- mysql 连接url中useUnicode=true&characterEncoding=UTF-8 的作用
- LCA
- 谈谈前后端的分工协作
- python-ASCII与字符间的转换
- linux 下USB 摄像头的使用说明
- 使用Myeclipse10创建Maven项目有如下几种方式:
- 原生Ajax书写
- servlet之cookied/session深入浅出(上)
- CSDN之添加不同颜色的友情链接
- 回溯算法求解数独