[POJ 1330] Nearest Common Ancestors (倍增法)

题目同上篇,最近公共祖先。

因为没有清零tot,RE了好多次TAT

一定要初始化啊!!

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<queue>
 4 #include<iostream>
 5 using namespace std;
 6 int root,head[10010];
 7 int next[10010],to[10010],tot;
 8 int deep[10010],n;
 9 int p[10010][16];
10 int deg[10010];
11 inline void bfs(int root) {
12     queue<int> Q;  
13     p[root][0]=root; deep[root]=0;  
14     Q.push(root);  
15     while(!Q.empty()) {  
16         int u=Q.front(); Q.pop();  
17         for(int i=1;i<15;i++)  
18             p[u][i]=p[p[u][i-1]][i-1];  
19         for(int i=head[u];i!=-1;i=next[i]) {  
20             int v=to[i];  
21             deep[v]=deep[u]+1; p[v][0]=u;  
22             Q.push(v);  
23         }  
24     }  
25 }
26 inline int LCA(int x,int y) {
27     if(deep[x]<deep[y]) {int t=x;x=y;y=t;}
28     for(int i=0;i<15;i++)  
29         if((deep[x]-deep[y]) & (1<<i)) x=p[x][i];  
30     if(x==y)  return x;  
31     for(int i=14;i>=0;i--)  
32         if(p[x][i]!=p[y][i])  
33             x=p[x][i],y=p[y][i];  
34     return p[x][0];  
35 }
36 int main() {
37     int T;
38     scanf("%d",&T);
39     while(T--) {
40         tot=0;
41         memset(head,-1,sizeof(head)); memset(deg,0,sizeof(deg));
42         scanf("%d",&n);
43         for (int i=1;i<=n-1;++i) {
44             int u,v;
45             scanf("%d%d",&u,&v);
46             to[tot]=v;
47             next[tot]=head[u];
48             head[u]=tot++;
49             deg[v]=1; 
50         }
51         for (int i=1;i<=n;++i)
52             if(! deg[i]) {root=i;break;}
53         bfs(root);
54         int u,v;
55         scanf("%d%d",&u,&v);
56         printf("%d\n",LCA(u,v));
57     }
58     return 0;
59 }
View Code

倍增法简介:

deep[i] 表示 i节点的深度, fa[i,j]表示 i 的 2^j (即2的j次方) 倍祖先,那么fa[i , 0]即为节点i 的父亲,然后就有一个递推式子fa[i,j]=fa [fa[i,j-1],j-1]

可以这样理解:设tmp = fa [i, j - 1] ,tmp2 = fa [tmp, j - 1 ] ,即tmp 是i 的第2 ^ (j - 1) 倍祖先,tmp2 是tmp 的第2 ^ (j - 1) 倍祖先,

所以tmp2 是i 的第2 ^ (j - 1) + 2 ^ (j - 1) =  2^ j 倍祖先

注意:这里的“倍”可不能理解为倍数的意思,而是距离节点i有多远的意思,节点i的第2 ^ j 倍祖先表示的节点u满足deep[ u ] - deep[ i ] = 2 ^ j。

        这样子一个O(NlogN)的预处理求出每个节点的 2^k 的祖先  
        然后对于每一个询问的点对a, b的最近公共祖先就是: 

 先判断是否 d[x]< d[y] ,如果是的话就交换一下(保证 x 的深度大于 y 的深度), 然后把 x 调到与 y 同深度, 同深度以后再把a, b 同时往上调,调到有一个最小的 j 满足fa [x,j] != fa [y,j] (x,y是在不断更新的), 最后再把(x,y)往上调(x=p[x,0], y=p[y,0])  ,一个一个向上调直到x = y, 这时 x或y 就是他们的最近公共祖先。

 

转载于:https://www.cnblogs.com/TonyNeal/p/poj1330_2.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/459245.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javascript console 函数详解 js开发调试的利器 浏览:3201|更新:2014-05-30 09:27

引用地址&#xff1a;http://jingyan.baidu.com/article/e75aca855c6419142edac6c1.html一键约师傅百度师傅最快的到家服务&#xff0c;最优质的电脑清灰&#xff01;Console 是用于显示 JS和 DOM 对象信息的单独窗口。并且向 JS 中注入1个 console 对象&#xff0c;使用该对象…

链路层基本问题 : 封装成帧、差错检测、流量控制

一、封装成帧 1、MAC帧 类型字段 &#xff08;2个字节&#xff09;&#xff1a; 用来标志上一层使用的是什么协议&#xff0c;以便把收到的MAC帧的数据上交给上一层的这个协议。 数据字段 &#xff08;46-1500&#xff09;&#xff1a; 正式名称是MAC客户数据字段最小长度6…

mysql 5.7 super_MySQL 5.7 下的对super用户只读

在MySQL的主从复制场景下&#xff0c;遇上slave被意外写入数据是一件比较严重的问题&#xff0c;毕竟在一般情况下我们都希望slave仅用只读数据库&#xff0c;如果被意外写入数据可能会造成数据的不一致&#xff0c;从而导致主从的报错。因此在MySQL中可以通过设置变量参数read…

CSS 链接

2019独角兽企业重金招聘Python工程师标准>>> 不同的链接可以有不同的样式。 链接样式 链接的样式&#xff0c;可以用任何CSS属性&#xff08;如颜色&#xff0c;字体&#xff0c;背景等&#xff09;。 特别的链接&#xff0c;可以有不同的样式&#xff0c;这取决于他…

数据链路层:ARP协议详解(绝对经典)

&#xff11;、ARP协议定义&#xff1a; 地址解析协议&#xff0c;工作在数据链路层&#xff0c;在本层和硬件接口联系&#xff0c;同时向上层提供服务。IP数据包常通过以太网发送&#xff0c;以太网设备不识别32位IP地址&#xff0c;他们是以48位以太网地址传输以太网数据包的…

php pdo操作mysql_PHP操作数据库详细(PDO)

PHP 5.1 发布时将附带一个全新的数据库连接层&#xff0c;即 PHP Data Objects (PDO)。虽然 PHP 一直都拥有很好的数据库连接&#xff0c;但 PDO 让 PHP的数据库操作 达到一个新的高度。PDO可支持基本的MySQL、Microsoft SQL Server、Oracle等数据库&#xff0c;并且提供了统一…

HTTP POST请求报文格式分析与Java实现文件上传

时间 2014-12-11 12:41:43 CSDN博客原文 http://blog.csdn.net/bboyfeiyu/article/details/41863951主题 HTTP HttpComponents在开发中&#xff0c;我们使用的比较多的HTTP请求方式基本上就是GET、POST。其中GET用于从服务器获取数据&#xff0c;POST主要用于向服务器提交一些…

网络层:IP协议详解(IP协议真的得看这篇)

1、IP协议概念 IP&#xff08;Internet Protocol , 互联网协议&#xff09;主要用于互联网通信。IP协议用于将多个包交换网络连接起来&#xff0c;他在原地址和目的地址之间传输数据报&#xff0c;还提供对数据大小的重新组装功能&#xff0c;以适应不同网络的要求。 IP协议是…

传输层两大协议:TCP与UDP详解(两者的联系与区别)

一、TCP协议 1、TCP协议报文格式 TCP协议报文格式详解 2、TCP“三次握手”建立连接 位码即tcp标志位,有6种标示: SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急) Sequence number(顺序号码) Ac…

docker二进制安装mysql_Docker搭建MySQL读写分离主从模式 分布式数据库中间件Mycat分库分表应用...

一、MySQL读写分离主从模式1. 下载镜像docker pull mysql当前最新版本&#xff1a;mysql Ver 8.0.19 for Linux on x86_64 (MySQL Community Server - GPL)2. 启动主节点并修改配置文件docker run -it --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD123456 mysql bash修改/…

五种I/O模型详解

1. 概念理解 在进行网络编程时&#xff0c;我们常常见到同步(Sync)/异步(Async)&#xff0c;阻塞(Block)/非阻塞(Unblock)四种调用方式&#xff1a; 同步&#xff1a; 所谓同步&#xff0c;就是在发出一个功能调用时&#xff0c;在没有得到结果之前&#xff0c;该调用就不…

存储过程 while is null_4.2 串的存储实现(2)

返回目录&#xff1a;Chilan Yu&#xff1a;《数据结构》目录链接​zhuanlan.zhihu.com4.2.2 堆串字符串包括串名与串值两部分&#xff0c;而串值采用堆串存储方式存储&#xff0c;串名用符号表存储。堆串存储方式&#xff1a;这种存储方法以一组地址连续的存储单元存放串的字符…

高光谱图像pca降维_高光谱图像的数据特性之探讨

图像是获取信息以及探知世界的重要媒介。近年来&#xff0c;传感科技与成像技术实现了跨越式发展&#xff0c;促使图像获取在质与量上均获得了显著提升。在多样化成像手段中&#xff0c;光谱成像技术是成像科技的重要组成部分&#xff0c;是人类借助光这一能量手段探测物质特性…

注册Tomcat服务为系统服务

2019独角兽企业重金招聘Python工程师标准>>> 将解压版的Tomcat服务注册为系统服务之后&#xff0c;就不用每次启动机器之后都要手动去启动"startup.bat"&#xff0c;就方便多了&#xff0c;下面就是具体步骤&#xff08;以我的机器为例&#xff0c;我的To…

【Spring学习笔记-MVC-17】Spring MVC之拦截器

作者&#xff1a;ssslinppp 1. 拦截器简介及应用场景2. 拦截器接口及拦截器适配器3. 运行流程图正常运行中断流程4. 程序实例控制层&#xff1a;ControllerRequestMapping(value "/test")public class TestController {RequestMapping(value "/intercept…

iOS之地理位置及定位系统 -- 入门笔记(用Swift)

前言&#xff1a;关于地理位置及定位系统&#xff0c;在iOS开发中也比较常见&#xff0c;比如美团外面的餐饮店铺的搜索&#xff0c;它首先需要用户当前手机的位置&#xff0c;然后在这个位置附近搜索相关的餐饮店铺的位置&#xff0c;并提供相关的餐饮信息&#xff0c;再比如最…

PHP监測memcache服务端的执行状况

. 代码例如以下&#xff0c;代码为memcache官方代码&#xff0c;引用在此。做一下简单的说明&#xff1a; 1、设置username和password define(ADMIN_USERNAME,admin); // Admin Username define(ADMIN_PASSWORD,123456); // Admin Password 2、配置server及其port&#xff0…

linux grep 匹配空格_17 个案例,5 分钟简单搞定 Linux 正则表达式!

正则表达式是一种字符模式&#xff0c;用于在查找过程中匹配制定的字符。元字符通常在Linux中分为两类&#xff1a;Shell元字符&#xff0c;由Linux Shell进行解析&#xff1b;正则表达式元字符&#xff0c;由vi/grep/sed/awk等文本处理工具进行解析&#xff1b;正则表达式一般…

micropython web ws2812_MicroPython实例之TPYBoard v102炫彩跑马灯WS2812B

一、实验目的了解ws2812b的工作原理学习ws2812b的驱动方法二、实验器材TPYBoard v102 1块ws2812b RGB-Ring-8 1个micro USB数据线 1条杜邦线 若干三、WS2812B的介绍WS2812B是一个集控制电路与发光电路于一体的智能外控LED光源。 其外型与一个5050LED灯珠相同&#xff0c; 每个元…

mysql数据库表复用_MySQL 数据库之表操作

一、创建表的完整语法create table 表(字段名1 类型 [(宽度) 约束条件]&#xff0c;字段名2 类型 [(宽度) 约束条件]&#xff0c;字段名3 类型 [(宽度) 约束条件])&#xff1b;1.类型&#xff1a;使用限制字段必须以什么样的数据类型传值约束条件&#xff1a;约束条件是在类型之…