poj 1986 最近公共祖先 (lca 倍增)
来源:互联网 发布:吉田のしる知る 番号 编辑:程序博客网 时间:2024/06/10 08:19
第一次做这个认识lca,了解倍增模板的实际用法
《挑战程序设计》328页有详细解释。饿的不行了,有需要的私聊吧
#include<stdio.h>#include<cstring>#include<vector>using namespace std;#define cl(a,b) memset(a,b,sizeof(a))#define ll long long#define pb push_backconst int maxn = 200000;vector<pair<int,int> > G[maxn];int p[maxn][30];int parent[maxn][30];int dep[maxn];void dfs(int u,int fa){ for(int i=0;i<G[u].size();i++) { int v=G[u][i].first; if(v==fa)continue; p[v][0]=G[u][i].second; parent[v][0]=u; dep[v]=dep[u]+1; for(int j=1;j<30;j++) { int t=parent[v][j-1]; if(t==0)continue; p[v][j]=p[v][j-1]+p[t][j-1]; parent[v][j]=parent[t][j-1]; } dfs(v,u); }}int lca(int u,int v){ int ans=0; if(dep[u]>dep[v])swap(u,v); for(int i=0;i<30;i++) { if((dep[v]-dep[u])>>i&1) ans+=p[v][i],v=parent[v][i]; } if(u==v)return ans; for(int i=30-1;i>=0;i--)//向上遍历i层,肯定不到30层就有公共祖先 { if(parent[u][i]!=parent[v][i]) { ans+=p[u][i]+p[v][i]; u=parent[u][i]; v=parent[v][i]; } } if(parent[u][0]==0||parent[v][0]==0)return 0;//给出的图可能是不连通的需要特判一下 return ans+p[v][0]+p[u][0];// return parent[u][0];找到公共祖先了,加上到公共祖先的距离}int n,m,x,y,w;char op[2];int main(){ scanf("%d%d",&n,&m); for(int i=0;i<m;i++) { scanf("%d%d%d%s",&x,&y,&w,op); G[x].pb(make_pair(y,w)); G[y].pb(make_pair(x,w)); } dfs(1,1); int k; scanf("%d",&k); while(k--) { int x,y; scanf("%d%d",&x,&y); printf("%d\n",lca(x,y)); } return 0;}
阅读全文
0 0
- poj 1986 最近公共祖先 (lca 倍增)
- 最近公共祖先 LCA 倍增算法
- 最近公共祖先(LCA)---倍增法
- 最近公共祖先(LCA):倍增
- 最近公共祖先 LCA 倍增+Tarjan实现
- 最近公共祖先LCA倍增算法
- 倍增法求最近公共祖先 lca
- LCA(最近公共祖先)倍增算法
- 最近公共祖先 LCA 倍增算法
- 【LCA倍增模板】【poj1330】最近公共祖先
- LCA最近公共祖先(朴素+倍增法)
- 最近公共祖先(LCA):tarjan与倍增
- 树上倍增求LCA(最近公共祖先)
- lca(最近公共祖先)倍增模板【pascal】
- LCA 在线倍增法 求最近公共祖先
- LCA(最近公共祖先)倍增法模板及总结
- lca最近公共祖先(st表/倍增)
- LCA(最近公共祖先)倍增法实现
- hibernate添加新的功能模块报错 unknown entity
- Hadoop4-用MapReduce写WordCount
- Mysql 数据库-数据库和表的操作
- 用js控制进入全屏,退出全屏
- MySQL 函数
- poj 1986 最近公共祖先 (lca 倍增)
- 小程序坑及案例
- markdown编辑器
- android 7.0 浏览器 拦截适配 shouldOverrideUrlLoading
- HAWQ + MADlib 玩转数据挖掘之(九)——回归方法之Logistic回归
- memcached全面剖析–3. memcached的删除机制和发展方向
- 微信小程序注册
- leetcode 236. Lowest Common Ancestor of a Binary Tree
- SSL P1255 佳佳的魔法照片