倍增法求LCA

本文介绍了一种利用倍增法求解树上两点间最短路径的LCA算法,通过预处理父节点和深度信息,实现O(logn)时间复杂度查找最近公共祖先,进而快速计算两点间距离。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

倍增法求LCA

可以利用LCA快速的求出树上两点间的最短路

时间复杂度O(nlogn)

 1 #include<iostream>
 2 #include<string.h>
 3 #include<algorithm>
 4 #include<vector>
 5 #include<map>
 6 #include<bitset>
 7 #include<set>
 8 #include<math.h>
 9 #include<string>
10 #if !defined(_WIN32)
11 #include<bits/stdc++.h>
12 #endif // !defined(_WIN32)
13 #define ll long long
14 #define dd double
15 using namespace std;
16 struct edge
17 {
18     int to;
19     int weight;
20     int next;
21 }e[500005];
22 int head[100086];
23 int p[100086][25];
24 int deep[100086];
25 ll dis[100086];
26 int n, m;
27 int tot;
28 void add(int x, int y, int z)
29 {
30     tot++;
31     e[tot].to = y;
32     e[tot].weight = z;
33     e[tot].next = head[x];
34     head[x] = tot;
35 }
36 void dfs(int x, int f)
37 {
38     p[x][0] = f;
39     deep[x] = deep[f] + 1;
40     for (int i = 1; (1 << i) <= deep[x]; i++)
41         p[x][i] = p[p[x][i - 1]][i - 1];
42     for (int i = head[x]; i; i = e[i].next)
43     {
44         int to = e[i].to;
45         if (to != f)
46         {
47             dis[to] = dis[x] + e[i].weight;
48             dfs(to, x);
49         }
50     }
51 }
52 int lca(int x, int y)
53 {
54     if (deep[x] < deep[y])
55         swap(x, y);
56     while (deep[x] > deep[y])
57         x = p[x][(int)log2(deep[x] - deep[y])];
58     if (x == y)
59         return y;
60     for (int k = (int)log2(deep[x]); k >= 0; k--)
61         if (p[x][k] != p[y][k])
62         {
63             x = p[x][k];
64             y = p[y][k];
65         }
66     return p[x][0];
67 }
68 int main()
69 {
70     cin >> n >> m;
71     for (int i = 1; i < n; i++)
72     {
73         int x, y, z;
74         cin >> x >> y >> z;
75         add(x, y, z);
76         add(y, x, z);
77     }
78     dfs(1, 0);
79     for (int i = 1; i <= m; i++)
80     {
81         int x, y;
82         cin >> x >> y;
83         int c = lca(x, y);
84         cout << dis[x] + dis[y] - 2 * dis[c] << endl;
85     }
86     return 0;
87 }

 

转载于:https://www.cnblogs.com/HNFOX/p/11273997.html

Mini SAP 6.2 安装 ABAP/4 编程 一,准备   A),建议备份操作系统,如GHOST,安装失败后可快速恢复操作系统,再次安装; B),安装的目标分区格式必须是NTFS; C),联通局域网,如果是单机使用最好是(添加硬件→添加新的硬件设备→网络适配器)安装虚拟网卡Microsoft Loopback Adapter并设 置 IP、DNS; D),DAEMON Tools用于加载BIN格式的镜像文件,最好将虚拟的光驱设为Z ; E),在这个文件 C:\WINNT\system32\drivers\etc\services (Windows 2000) 或者 C:\Windows\system\32\drivers\etc\services (Windows XP) 中必须不含有端口为 3600 的一行(服务); F),在 Windows XP 上的特别要求 在 C:\Windows\system\32\drivers\etc\hosts 这个文件中,一般包含了这么一行 127.0.0.1 localhost 必须配置这么一行 ,并新添加 Open the network connectivity definition with start->control panel->network connections for defining the network connection. Select ->extended-> allow other users in network. Activate new configurations. Select remote desktop within extended configuration menu. G),以前安装有 sql server,安装 MiniSAP 前必须先予以 uninstall,并删除安装目录。  注:E、F、G项参考 廖巍 作《安装 Mini SAP 的注意事项》 ,我在之前的安装未做这三项也正常安装,因水平有限未发现系统 中有何影响。应该是版本不同的缘故! 二,安装 安装时需更换镜像文件,但安装界面无明显的提示,按如下步骤操作即可: A),DAEMON加载CD1,执行 X:\setup.bat 开始安装; B),进度25%时提示插入源文件,此时仍是 CD1; C),进度27%时提示插入源文件,此时仍是 CD1; D),进度41% 时提示插入源文件,更换为 CD2; E),进度44%时提示插入源文件,更换为 CD3; F),进度47%时 提示插入源文件,更换为 CD1; G),X:\resume_setup.bat,需要重装一遍,以激活licence(如果licence不能启动,可考虑这一步骤);    我安装完后出现5个warning,只要没有error就OK。 H),GUI安装,执行 X:\MINIGUI\setup.exe; 安装完成后桌面出现Start SAP ABAP Engine和SAPlogon两个快捷方式。 三,登录    A),“SAPlogon”,出现登录窗口(SAP Logon 620),点击【新(N)…】按钮 在“新增”窗口做如下配置: 说明:“任意填写” 应用服务器:(假设这是你的电脑名) SAP路由字符串:不填 SAP系统:选择R/3 系统编号:00 点击【确定】按钮,返回到登录窗口(SAP Logon 620) 此时在登录窗口(SAP Logon 620),选中“任意填写”,登录 Client User Password -------------- 000 BCUSER minisap 000 DDIC minisap 000 Sap* Pass BCUSER是普通用户;DDIC为管理员用 B),登录后窗口的工具栏上,点击倒数第3个按钮(generates a shoutcut on the desktop) 配置“New SAP GUI Shoutcut”窗口 system date: ----------------------- Description: “任意填写”(下拉列表中选择上一步中填的实际名称) system ID : BSP SAP GUI parmeter: logon date: ----------------------- client: 000 user name: BCUSER password:minisap language:EN-English(有中文选项,可惜并不支持,不知有没有办法把SAP 4.71的中文包挂进来) application: ----------------------- 不管 starting: ----------------------- 不管 配置完成后,点击【ok】,然后桌面上出现图标“ , MIN SAP Easy Access.sap” 以后每次先运行“Start SAP ABAP Engine”,然后再运行“ , MIN SAP Easy Access.sap” 四,ABAP/4编程 A),创建程序时程序以Z、Y、SAPMY、SAPMZ开头,并遵守以下规则,否则提示无法创建程序; 创建程序名称时遵循如下规则: • 使用至少1个但不超过8个字符(8个字符是4.6C标准,实际可以超过8位长度) • 不要使用下列字符 • 句点(.) • 逗号(,) • 空格() • 括号'('')' • 单引号(') • 双引号(") • 等号(=) • 星号(*) • 元音变音(_,_,_,_,_,_)和'_' • 百分号(%)和下划线(_):这些符号是SQL语句的通配符,所以也会导致问题。SAP建议在程序名称中不要使用它们。  创建程序名称时请遵守这些命名约定: • 报表程序(以列表格式输出数据分析):Yaxxxxxx或Zaxxxxxx。用应用程序区的分类字母替换a。用任何有效字符替换x。注意SAP报表 程序遵守相似的命名约定:Raxxxxxx。 • 任何其它ABAP/4程序(培训程序或事务程序):SAPMYxxx或SAPMZxxx。用有效字符替换x。注意标准SAPABAP/4程序遵守相似的命 名约定:SAPMaxxx,其中a代表某应用程序区。 B),创建练习程序时 Package 最好选择 $TMP  (开发)一项; C),菜单Environment→examples→ABAP examples中可有ABAP的实例,是学习研究的好东西; D),学习ABAP/4编程推荐《SAP ABAP/4 开发宝典中文版》约1.32M。 SAP NetWeaver 2004s SAP NetWeaver 7.0 ABAP/4 新ABAP编辑器 一,安装要求: • Windows XP Professional (Service Pack 2) 或 Windows Server 2003 • 机器名长度不超过13 • NTFS文件系统 • Internet Explorer 5.01 或更高, Firefox 1.0 或更高 • 最小 1G 物理内存 • Intel Pentium III/1.1 GHz 或 higher (or compatible) • 22G硬盘空间,安装文件临时硬盘空间10G • 显示分辨率(1024x768 or 更高, 256 色)安装网卡并设置IP、DNS,无网卡时安装虚拟网卡Microsoft Loopback Adapter并设置IP、DNS • 操作系统中无其他SAP系统 • 在这个文件 C:"WINDOWS"system32"drivers"etc"services (Windows 2003) 或者C:"Windows"system"32"drivers"etc"services (Windows XP) 中必须不含有端口为3200,3600,8000 的服务  下载地址:ftp://ftp.sap.com/pub/sdn/devkits/netweaver/abap/  源文件:SAPNW7.0ABAPTrialSP12 2RAR分卷 共2.52G 其他文件:404M    安装后:≈15G(不包括W2k3系统) 二,安装 安装时间约30分钟。    A),查看X:"SAPNW7.0ABAPTrialSP12"start.htm的提示操作或双击X:"SAPNW7.0ABAPTrialSP12"image"setup.exe开始安装,一路默认确定并设 置密码,约30分钟完成安装,; B),GUI安装,执行 X:"SAPNW7.0ABAPTrialSP12"SAPGUI"SapGuiSetup.exe; 安装完成后桌面出现SAP Management Console和SAPlogon两个快捷方式。 三,登录    A),“SAPlogon”,出现登录窗口(SAP Logon 710),点击“系统”选项卡,再点击【新建项目(N)…】按钮 “创建系统条目”界面,不理,直接下一步: “连接类型:”选“自定义应用程序服务器” 描述:“任意填写” 应用服务器:(假设这是你的电脑名) 系统编号:00 系统标识:000 “网络”、“代码页”选项卡用默认值。 点击【确定】按钮,返回到登录窗口(SAP Logon 710) 此时在登录窗口(SAP Logon 710),选中“任意填写”,登录 Client User Password -------------- 000 Sap* minisap 000 BCUSER minisap 000 DDIC minisap BCUSER是普通用户;DDIC为管理员用 B),BCUSER用户的环境修改建议。默认收藏夹中无SAP EDITOR一项,通过输入快捷代码 SE38 调用编辑器,这时可在TOOLS中 修改菜单项名称 。 四,ABAP/4编程 未获ACCESS KEY时创建程序的规则如下 A),创建程序时程序以Z、Y、SAPMY、SAPMZ开头,并遵守以下规则,否则提示无法创建程序; 创建程序名称时遵循如下规则: • 使用至少1个但不超过8个字符(8个字符是4.6C标准,实际可以超过8位长度) • 不要使用下列字符 • 句点(.) • 逗号(,) • 空格() • 括号'('')' • 单引号(') • 双引号(") • 等号(=) • 星号(*) • 元音变音(_,_,_,_,_,_)和'_' • 百分号(%)和下划线(_):这些符号是SQL语句的通配符,所以也会导致问题。SAP建议在程序名称中不要使用它们。  创建程序名称时请遵守这些命名约定: • 报表程序(以列表格式输出数据分析):Yaxxxxxx或Zaxxxxxx。用应用程序区的分类字母替换a。用任何有效字符替换x。注意SAP报表程序遵守相似的命名约定:Raxxxxxx。 • 任何其它ABAP/4程序(培训程序或事务程序):SAPMYxxx或SAPMZxxx。用有效字符替换x。注意标准SAPABAP/4程序遵守相似的命名约定:SAPMaxxx,其中a代表某应用程序区。 B),创建练习程序时 Package 最好选择 $TMP  (开发)一项,; C),菜单Environment→examples→ABAP examples中可有ABAP的实例,是学习研究的好东西;    四,MaxDB数据库 安装 MaxDB Database Manager 和 SQL Studio 方法一:开始菜单中MaxDB下有安装图标 方法二:源文件直接安装 目录X:"SAPNW7.0ABAPTrialSP12"maxdbtools"DBM76.exe X:"SAPNW7.0ABAPTrialSP12"maxdbtools"SQLSTD76.exe Database Manager登录 Database Server: localhost Port:不填 Database Name: NSP User Name: control Password: 安装时设定的密码 SQL Studio登录 Database Server: localhost Database Name: NSP User Name: SAPNSP Password: 安装时设定的密码 MaxDB同MySql出自同一公司,但MaxDB的文档较少,慢慢找吧! 五,申请license key激活SAP*帐号 Sap*帐号登录。菜单第一项“SLICENSE-Administer SAP Licenses”按提示操作即可。注意项:安装SAP系统的电脑必须能上网,在申请Licenses的界面中系统类型选择“NSP - SAP NetWeaver 7.0/2004s (SP9 and higher)”,搞错了申请的文件就不能安装,提交后,邮件接收“NSP.txt”文件,649字节,按提示安装,使用期限3个月。此文件是与硬件和SAP系统的电脑关联一一对应,安装SAP系统的电脑不能上网就不能申请,别无他法。 六,ACCESS KEY破解 参考网上的ACCESS KEY 破确方法,初步了解了破解的原理,修改LSKEYF00文件等等,稍有并异,修改原文件加入SY-SUBRC =0代码也都成功,最后在开发时还是要示输入ACCESS KEY,希望有SAPNW7.0ABAPTrialSP12破解成功的朋友回个邮件给我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值