poj1330
来源:互联网 发布:淘宝搜索优化软件 编辑:程序博客网 时间:2024/06/05 17:53
LCA
#include<stdio.h>#include<string.h>#include<vector>#include<cmath>using namespace std;vector<int> c[10005];int n,cnt,first[10005],dfs_val[20100],dfs_deep[20100];int dp[20100][16];void dfs(int root,int deep){ dfs_deep[++cnt]=deep; dfs_val[cnt]=root; first[root]=cnt; for(int i=0;i<c[root].size();i++) { dfs(c[root][i],deep+1); dfs_deep[++cnt]=deep; dfs_val[cnt]=root; }}void st(){ int i,j; for(i=1;i<=cnt;i++) dp[i][0]=i; for(j=1;j<=(int)(log(1.0*cnt)/log(2.0));j++) { for(i=1;i<=cnt+1-(1<<j);i++) { int p=i+(1<<(j-1)); if(dfs_deep[dp[i][j-1]]>dfs_deep[dp[p][j-1]]) dp[i][j]=dp[p][j-1]; else dp[i][j]=dp[i][j-1]; } }}int rmq(int l,int r){ l=first[l],r=first[r]; if(l>r) swap(l,r); int k=(int)(log(1.0*(r-l+1))/log(2.0)); if(dfs_deep[dp[l][k]]<dfs_deep[dp[r+1-(1<<k)][k]]) return dp[l][k]; else return dp[r+1-(1<<k)][k];}int main(){ int i,t,x,y,root; scanf("%d",&t); while(t--) { scanf("%d",&n); for(i=1;i<=n;i++) c[i].clear(); scanf("%d%d",&x,&y); c[x].push_back(y); root=x; for(i=2;i<n;i++) { scanf("%d%d",&x,&y); c[x].push_back(y); if(y==root) root=x; } cnt=0; memset(first,0,sizeof(first)); dfs(root,0); st(); scanf("%d%d",&x,&y); printf("%d\n",dfs_val[rmq(x,y)]); }}
0 0
- poj1330
- poj1330
- poj1330
- poj1330
- poj1330
- poj1330
- POJ1330 TarjanLCA
- POJ1330 倍增
- POJ1330 Nearest Common Ancestors
- LCA问题 poj1330 / poj1470
- poj1330 LCA离线算法
- poj1330 解题报告
- POJ1330(Nearest Common Ancestors)
- poj1330 lca转rmq
- POJ1330--Nearest Common Ancestors
- POJ1330(最近公共祖先)
- POJ1330(LCA-离线tarjan)
- poj1330 倍增LCA
- Java 判断操作系统类型(适用于各种操作系统)
- Node.js 调试 GC 以及内存暴涨的分析
- linux c下简单实现服务端与多客户端同时连接
- java方法调用
- 2016/7/20
- poj1330
- centos 6.5 安装和配置 SonarQube
- exynos4412开发板设备注册与驱动注册剖析
- HTML5 浅谈 媒体标签<video><audio>
- 自定义View(一)
- 《Java源码分析》:LinkedHashMap
- oracle12c cdb和pdb参数修改
- sftp
- HTTP的通信的发送请求,接受请求响应包含哪些内容?OC中是怎样实现的?