[模板]洛谷T3379 最近公共祖先(LCA) 倍增+邻接表

一年前听说的这东西。。。现在终于会了。。。

  1 #include<cstdio>
  2 #include<iostream>
  3 #include<cstring>
  4 #include<cmath>
  5 #include<ctime>
  6 #include<cstdlib>
  7 
  8 #include<string>
  9 #include<stack>
 10 #include<queue>
 11 #include<vector>
 12 #include<algorithm>
 13 #include<map>
 14 #include<set>
 15 
 16 #define M 500005
 17 
 18 using namespace std;
 19 
 20 inline void read(int &x){
 21     x=0;
 22     char t=getchar();
 23     bool f=0;
 24     
 25     while(t<'0' || t>'9'){
 26         if(t=='-')f=1;
 27         t=getchar();
 28     }
 29     
 30     while(t>='0' && t<='9'){
 31         x=(x<<3)+(x<<1)+t-'0';
 32         t=getchar();
 33     }
 34     
 35     if(f)x=-x;
 36 }
 37 
 38 void dfs(int,int);
 39 inline int LCA(int,int);
 40 
 41 int u[1000010];
 42 int v[1000010];
 43 int first[500010];
 44 int next[1000010];
 45 
 46 bool used[500010];
 47 int high[500010];
 48 int fa[500010][20];
 49 
 50 int n,m,root;
 51 int i,j;
 52 int x,y;
 53 
 54 int main(){
 55     memset(first,0,sizeof(first));
 56     memset(next,0,sizeof(next));
 57     
 58     memset(used,0,sizeof(used));
 59     
 60     read(n);read(m);read(root);
 61     
 62     for(i=1;i<n;i++){
 63         read(x);read(y);
 64         
 65         u[i]=x;
 66         v[i]=y;
 67         next[i]=first[u[i]];
 68         first[u[i]]=i;
 69         
 70         u[i+M]=y;
 71         v[i+M]=x;
 72         next[i+M]=first[u[i+M]];
 73         first[u[i+M]]=i+M;
 74     }
 75     
 76     dfs(root,1);
 77     
 78     for(i=1;i<=m;i++){
 79         read(x);read(y);
 80         
 81         if(high[x]>high[y])swap(x,y);
 82         
 83         printf("%d\n",LCA(x,y));
 84     }
 85     
 86     return 0;
 87 }
 88 
 89 void dfs(int s,int h){
 90     int i,t;
 91     
 92     high[s]=h;
 93     used[s]=1;
 94     
 95     for(i=1;(1<<i)<h;i++)
 96         fa[s][i]=fa[fa[s][i-1]][i-1];
 97     
 98     t=first[s];
 99     
100     while(t!=0){
101         if(!used[v[t]]){
102             fa[v[t]][0]=s;
103             dfs(v[t],h+1);
104         }
105         
106         t=next[t];
107     }
108 }
109 
110 inline int LCA(int a,int b){
111     int dt=high[b]-high[a];
112     
113     for(register int i=0;(1<<i)<=dt;i++)
114         if((1<<i)&dt)b=fa[b][i];
115     
116     if(a==b)return a;
117     else{
118         for(register int i=19;i>=0;i--)
119             if(fa[a][i]!=fa[b][i]){
120                 a=fa[a][i];
121                 b=fa[b][i];
122             }
123         
124         return fa[a][0];
125     }
126 }

转载于:https://www.cnblogs.com/running-coder-wfh/p/7570905.html

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

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

相关文章

mysql更新数据能回滚吗_MySQL数据回滚-误更新和删除时快速恢复

这世界上有后悔药– www.houhuiyao.cc 后悔药数据恢复 站长语前面的内容也提到过update或delete误更新删除了数据后如何恢复。实际生产环境中常常因各种不同场景导致一些办法有效一些办法无效&#xff0c;当然&#xff0c;最有效的办法依然是备份&#xff01;虽然啰嗦&#xff…

口罩巨头挑战“量子霸权”,3个月造出的『最强量子计算机』靠谱不?

摘要霍尼韦尔(Honeywell)最近可是非常忙活。作为全球数一数二的口罩厂商&#xff0c;疫情期间霍尼韦尔一直在努力生产口罩&#xff0c;大家对它的印象也多停留在口罩生产者的层面。但是事实上&#xff0c;人家是正经的多元化高科技制造企业&#xff0c;航空产品、汽车产品、涡轮…

三极管稳压管组成的线性电源关键理解

1. A点电压为20V.B点电压是稳压管电压5.6V.则A到B的电流是固定的。 2. 加电后在调整三极管&#xff0c;负载&#xff0c; 稳压管的电流回路如图。&#xff08;注意电流方向&#xff0c;a->b电流方向和大小都是基本不变的。&#xff09; 转载于:https://www.cnblogs.com/ture…

oci连接mysql_使用 OCILIB 连接并操作 Oracle 数据库

OCILIB是一个跨平台的Oracle驱动程序&#xff0c;可提供非常快速和可靠地访问Oracle数据库。它提供了一个丰富&#xff0c;功能齐全&#xff0c;并易于使用的APIOCILIB是一个跨平台的Oracle驱动程序&#xff0c;&#xff0c;可提供非常快速和可靠地访问Oracle数据库。它提供了一…

万字长文:2020智源大会总结-多角度看AI的未来

来源&#xff1a;混沌巡洋舰导读&#xff1a;智源大会2020 聚焦AI的未来&#xff0c;大家都知道&#xff0c; 2010是深度学习的时代&#xff0c; 我们经历了AI从巅峰进入到瓶颈的过程。那么什么是2020这个十年AI的中心&#xff1f;近一段大家逐步从各个不同的角度切入到这个主题…

python OCR 图形识别

1、pip install pyocr 2、pip install PIL 3、安装tesseract-ocr http://jaist.dl.sourceforge.net/project/tesseract-ocr-alt/tesseract-ocr-setup-3.02.02.exe exe文件&#xff0c;下载后直接安装&#xff0c;建议默认安装过程中的选项&#xff0c;安装目录默认C:\Program F…

python生成文件夹并向文件夹写文件_python - 文件练习生成100个MAC地址写入文件

需求&#xff1a;生成100个MAC地址并写入文件中&#xff0c;MAC地址前6位(16进制)为01-AF-3B解题思路&#xff1a;要求生成这样格式的mac地址&#xff1a;01-AF-3B-xx-xx-xx首先生成-xx格式&#xff0c;16进制组成的数,注意MAC英文字母为大写。拼接成为&#xff1a;01-AF-3B-xx…

智能发展与双重建构

来源&#xff1a; 人机与认知实验室本文摘自1983.5《国内哲学动态》皮亚杰有关同化和顺应及其平衡的图式学说是对智慧机制的一种结构主义的共时性分析,但是他更重视对智慧机制进行建构主义的历时性研究。主体关于客体的知识以及主体自身的认识图式都不仅仅是一种状态体系 , 而首…

2017.09.21学习总结

两天的时间主要学习了html的基本结构&#xff0c;标签&#xff0c;列表以及表格。 表格方面<td><tr>总是弄混&#xff1b; 合并用起来有些眼花&#xff0c;不过仔细的研究一下还是没什么问题。 加油&#xff01;努力&#xff01;目标&#xff1a;资深码农~~转载于:…

springboot2整合mysql5_SpringBoot2整合SSM框架详解

SpringBoot2整合SSM框架详解发布时间&#xff1a;2019-01-15 21:33,浏览次数&#xff1a;1218, 标签&#xff1a;SpringBootSSM<>开发环境* 开发工具&#xff1a;Eclipse STS插件* JDK版本&#xff1a;9.0.4* MySQL版本&#xff1a;8.0.12* Spring Boot版本&#xff1a;…

前途无量的MEMS传感器

来源&#xff1a;转载自「民生证券」&#xff0c;谢谢微机电系统&#xff08;Microelectromechanical Systems&#xff0c;简称 MEMS&#xff09;是将微电子技术与精密机械技术结合发展出来的工程技术&#xff0c;尺寸在 1 微米到 100 微米量级&#xff0c;涵盖机械&#xff08…

怎么查看kudu的版本_apache版本kudu kudu-impala安装方法

kudu安装方法简介第一步&#xff1a;下载rpm包http://archive.cloudera.com/kudu/redhat/6/x86_64/kudu/5.12.2/RPMS/x86_64/kudu-1.4.0cdh5.12.20-1.cdh5.12.2.p0.8.el6.x86_64.rpmkudu-client-devel-1.4.0cdh5.12.20-1.cdh5.12.2.p0.8.el6.x86_64.rpmkudu-client0-1.4.0cdh5.…

错误:子进程 已安装 pre-removal 脚本 返回了错误号 1

解决办法sudo rm /var/lib/dpkg/info/<package name>.*转载于:https://www.cnblogs.com/rabitvision/p/7588113.html

【技术趋势】德勤发布2020技术趋势报告,五个新趋势可引发颠覆性变革

来源&#xff1a;产业智能官“2020 年的趋势将颠覆整个行业&#xff0c;并在未来十年重新定义业务&#xff0c;即使数字创新已成为各种规模企业的常规行为。”德勤管理咨询新兴技术研究总监兼政府及公共服务首席技术官 Scott Buchholz 在一份报告中如是说。近日&#xff0c;《德…

Java IO流

IO流是用来处理设备之间的数据传输的&#xff0c;Java对数据的操作都是使用流的方式处理的&#xff0c;而且Java将处理流的操作封装成IO流对象了。 一、IO流的分类 流按照操作的数据分为&#xff1a;字节流、字符流 流按照流的方向分为&#xff1a;输入流、输出流 二、字节流&a…

mysql 模糊查询用法_mysql进阶(六)模糊查询的四种用法介绍

mysql中模糊查询的四种用法介绍这篇文章主要介绍了mysql中模糊查询的四种用法,需要的朋友可以参考下。下面介绍mysql中模糊查询的四种用法&#xff1a;1 %&#xff1a;表示任意0个或多个字符。可匹配任意类型和长度的字符&#xff0c;有些情况下若是中文&#xff0c;请使用两个…

Nature:FB和推特的数据是如何革新社会科学,改变世界的?

大数据文摘出品来源&#xff1a;nature编译&#xff1a;张睿毅2007年&#xff0c;一群有野心的科学家召集了一次会议&#xff0c;讨论新兴的社会科学数据处理的艺术。他们想运用自己的技能来改变世界。在演讲中&#xff0c;马萨诸塞州剑桥市哈佛大学的政治学家加里金&#xff0…

改变文件权限的用户身份

进程的有效用户ID必须是文件的所有者或超级用户转载于:https://www.cnblogs.com/justart/p/7591010.html

python合并两个属性_合并两个部分包含文件列表及其属性的最有效方法

我有一个系统&#xff0c;该系统运行带有ls或dir命令的变体的自定义cli&#xff0c;并返回工作目录中文件和文件夹的列表。问题是&#xff0c;我可以使用带标志的命令运行命令&#xff0c;该标志返回文件及其时间戳(创建和最后修改的日期)&#xff0c;或者返回一个标志返回文件…

格力入局的数控机床,掌握“核心科技”有多难?

来源&#xff1a;脑极体梦想还是要有的&#xff0c;万一要实现了呢&#xff1f;即便不能马上实现&#xff0c;坚持努力也是可以的。2016年&#xff0c;在格力主办的“第二届中国制造高峰论坛”上&#xff0c;董明珠曾放出这样的豪言壮语&#xff1a;两年后&#xff0c;做出最顶…