信息學奧賽一本通 1552:【例 1】點的距離

【題目鏈接】

ybt 1552:【例 1】點的距離

【題目考點】

1. 最近公共祖先(LCA):倍增求LCA

知識點講解見:洛谷 P3379 【模板】最近公共祖先(LCA)

【解題思路】

首先用鄰接表保存輸入的無權圖。
使用倍增求LCA的解題方法:設dep數組,depudep_udepu?表示頂點u的深度。設fa數組,fai,jfa_{i,j}fai,j?表示從結點i開始向上走2j2^j2j步可以到達的結點。
而后對該圖做深度優先遍歷,可以預處理求出dep數組和fa數組,同時也將該圖變為了有根樹。
該圖是無權圖,可以認為每條邊長度為1。
無權有根樹上,根結點到一個結點的路徑長度為該結點的深度(根結點深度為0)。
樹上任意兩結點之間存在唯一的路徑。記結點x到結點y的路徑長度為Dis(x,y)Dis(x, y)Dis(x,y)
結點x到結點y的路徑必然經過二者的最近公共祖先LCA(x, y)。
已知根結點r到x的路徑長度為dep[x]dep[x]dep[x],根結點r到y的路徑長度為dep[y]dep[y]dep[y]
根結點r到x的路徑可以分為r到LCA(x,y)的路徑,以及LCA(x, y)到x的路徑。
根結點r到y的路徑可以分為r到LCA(x,y)的路徑,以及LCA(x, y)到y的路徑。
二者相加后,總長度包括x到LCA(x, y)的路徑長度,LCA(x, y)到y的路徑長度,以及兩倍的r到LCA(x, y)的路徑長度。即x到y的路徑長度加上兩倍的LCA(x, y)的深度。
因此dep[x]+dep[y]=Dis(x,y)+2dep[LCA(x,y)]dep[x]+dep[y]=Dis(x, y)+2dep[LCA(x, y)]dep[x]+dep[y]=Dis(x,y)+2dep[LCA(x,y)]
所以Dis(x,y)=dep[x]+dep[y]?2dep[LCA(x,y)]Dis(x, y) = dep[x]+dep[y]-2dep[LCA(x, y)]Dis(x,y)=dep[x]+dep[y]?2dep[LCA(x,y)]
在這里插入圖片描述
使用倍增求LCA算法,每次查詢Dis(x,y)Dis(x, y)Dis(x,y)的時間復雜度為O(log?n)O(\log n)O(logn)

【題解代碼】

  • 解法1:倍增求LCA
#include<bits/stdc++.h>
using namespace std;
#define N 100005
#define LN 25
vector<int> edge[N];
int n, lg[N], dep[N], fa[N][LN];//f[i][j]:頂點i向上走2^j到達的頂點 
void initLg()
{for(int i = 2; i <= n; ++i)lg[i] = lg[i/2]+1;
}
void dfs(int u)
{for(int v : edge[u]) if(v != fa[u][0])//v不是u的父親 {fa[v][0] = u;dep[v] = dep[u]+1;for(int j = 1; 1<<j <= dep[v]; ++j)fa[v][j] = fa[fa[v][j-1]][j-1];dfs(v);}
}
int lca(int u, int v)
{if(dep[u] < dep[v])swap(u, v);while(dep[u] > dep[v])u = fa[u][lg[dep[u]-dep[v]]];if(u == v)//如果v本身為LCA(u, v),那么當二者深度相同時,二者相同 return u;for(int k = lg[dep[u]]; k >= 0; --k)if(fa[u][k] != fa[v][k])u = fa[u][k], v = fa[v][k];return fa[u][0];
}
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);int q, x, y;cin >> n;for(int i = 1; i < n; ++i){cin >> x >> y;edge[x].push_back(y);edge[y].push_back(x);}initLg();dfs(1);cin >> q;while(q--){cin >> x >> y;cout << dep[x]+dep[y]-2*dep[lca(x, y)] << '\n';}return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/89602.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/89602.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/89602.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

1Panel中的OpenResty使用alias

問題 在服務器上使用了1Panel的OpenResty來管理網站服務&#xff0c;當作是一個Nginx用&#xff0c;想做一個alias來直接管理某個文件夾的文件&#xff0c;于是直接在其中一個網站中使用了alias配置。 location /upload {alias /root/upload;autoindex on;charset utf-8;charse…

小明記賬簿煥新記:從單色到多彩的主題進化之路

【從冷靜藍到多彩世界&#xff0c;這一次我們重新定義記賬美學】 曾經&#xff0c;打開“小明記賬簿”是一片沉穩的藍色海洋&#xff0c;它像一位理性的財務管家&#xff0c;默默守護著你的每一筆收支。但總有人悄悄問&#xff1a;“能不能多一些顏色&#xff1f;”今天&#x…

Apache IoTDB(1):時序數據庫介紹與單機版安裝部署指南

目錄一、Apache IoTDB 是什么&#xff1f;1.1 產品介紹1.2 產品體系1.3 產品架構二、IoTDB 環境配置2.1 Linux系統需準備環境2.2 Windows系統需準備環境2.3 網絡配置2.3.1 關閉防火墻2.3.2 查看端口是否占用2.3.3 避雷經驗三、IoTDB 單機版系統部署安裝指南3.1 產品下載3.2 注意…

Python 圖片爬取入門:從手動下載到自動批量獲取

前言 想批量下載網頁圖片卻嫌手動保存太麻煩&#xff1f;本文用 Python 帶你實現自動爬取&#xff0c;從分析網站到代碼運行&#xff0c;步驟清晰&#xff0c;新手也能快速上手&#xff0c;輕松搞定圖片批量獲取。 1.安裝模塊 在開始爬取圖片前&#xff0c;我們需要準備好工具…

aspect-ratio: 1 / 1樣式在部分手機瀏覽器中失效的問題怎么解決?

最近在uniapp開發時又遇到了安卓手機不兼容問題&#xff0c;ios系統無影響。開發背景&#xff1a;小編想通過網格布局來實現答題卡的布局&#xff0c;實現五列多行的形式。代碼片段&#xff1a;<view class"question-grid"><viewv-for"(question, inde…

RecyclerView與ListView深度對比分析

1. 使用流程對比ListView: 布局XML&#xff1a; 在布局文件中放置 <ListView> 控件&#xff0c;指定 id (如 android:id"id/listView")。數據適配器 (Adapter)&#xff1a; 繼承 BaseAdapter 或 ArrayAdapter / CursorAdapter / SimpleAdapter。 重寫 getCount…

deepseekAI對接大模型的網頁PHP源碼帶管理后臺(可實現上傳分析文件)

前端后端都已進行優化&#xff0c;新增可上傳文件功能&#xff08;拖拽進去也可以&#xff09;&#xff0c;后端進行風格主題設置&#xff0c;優化數據結構&#xff01;依舊測試網站&#xff1a;iEPMS我的工具箱&#xff0c;你的智慧助手&#xff01;還是那句話兄弟們輕點搞我的…

NJU 凸優化導論(9) 對偶(II)KKT條件+變形重構

https://www.lamda.nju.edu.cn/chengq/optfall24/slides/Lecture_9.pdf 目錄 關于對偶的一些解釋 1. Max-min characterization 最大最小準則 2. Saddle-point Interpretation 鞍點解釋 3. Game interpretation 博弈論里的對偶 Optimality Conditions 最優條件 1. Certi…

Vue Swiper組件

Vue 漸進式JavaScript 框架 基于Vue2的學習筆記 - Vue Swiper組件實現筆記 目錄 Swiper組件 下載swiper 創建swiper組件 保存時修復 編寫swiper內容 引入swiper 使用swiper Swiper子組件 創建Swiper列表組件 使用子組件 增加生命周期 增加圖片顯示 加載數據 渲染…

Linux:lvs集群技術

一.集群和分布式1.1 集群集群是為了解決某個特定問題將多臺計算機組合起來形成的單個系統。即當單獨一臺主機無法承載現有的用戶請求量&#xff1b;或者一臺主機因為單一故障導致業務中斷的時候&#xff0c;就可以增加服務主機數&#xff0c;這些主機在一起提供服務&#xff0c…

【管理】持續交付2.0:業務引領的DevOps-精要增訂本,讀書筆記(理論模型,技術架構,業務價值)

【管理】持續交付2.0&#xff1a;業務引領的DevOps-精要增訂本&#xff0c;讀書筆記&#xff08;理論模型&#xff0c;技術架構&#xff0c;業務價值&#xff09; 文章目錄1、持續交付的理論模型&#xff08;第1-3章&#xff09;1.1 結構圖1.2 持續交付的演進1.3 雙環模型理論體…

Wilcox檢驗的星星怎么規定的?

在 R 里&#xff0c;常見的把 p 值映射為“星號”標記&#xff08;顯著性水平&#xff09;的規則通常是&#xff1a;p 值范圍標記p ≤ 0.0001“****”0.0001 < p ≤ 0.001“***”0.001 < p ≤ 0.01“**”0.01 < p ≤ 0.05“*”0.05 < p ≤ 0.1“.”p > 0.1…

https與DNS的運行流程

HTTPS流程&#xff1a;HTTPS核心:加了TLS層&#xff0c;加密傳輸身份認證TLS:信息加密、校驗機制、身份證書TLS&#xff08;Transport Layer Security&#xff09;握手是建立安全通信通道的關鍵過程&#xff0c;發生在客戶端&#xff08;如瀏覽器&#xff09;和服務器之間。其主…

板子 5.29--7.19

板子 5.29–7.19 目錄 1. 樹狀數組 2. KMP 3. 矩陣快速冪 4. 數位DP 5. 狀壓枚舉子集 6. 快速冪&#xff08;新版 7. priority_queue 8. dijkstra 9. 單調棧 10. debug內容 1. 樹狀數組 // 樹狀數組 快速求前綴和 / 前綴最大值 // 維護位置數量(離散化)...// (區間加 區間求和…

min-max容斥學習筆記

最近報了航電的春季賽&#xff0c;在一道題目里面遇到了做法&#xff0c;感覺挺有意思。 考慮一個&#xff08;多重&#xff09;集合S{ai}S\{a_i\}S{ai?}&#xff0c;有如下的等式成立 min?ai∈S(ai)∑T?S,T≠?(?1)∣T∣?1max?ai∈T(ai)\min_{a_i\in S}(a_i)\sum_{T\sub…

使用帆軟制作項目

https://zhuanlan.zhihu.com/p/23429318335 項目背景 為加快大數據體系建設&#xff0c;穩步推進數字化轉型戰略&#xff0c;規范數據架構體系和數據治理體系&#xff0c;運用大數據推進全行數字化轉型建設&#xff0c;為業務發展提供創新動力&#xff0c;目標是利用金融科技和…

論C/C++的條件編譯#if、#ifdef、#ifndef、#undef

我們以實例來演示&#xff1a; ------------------------------------------實驗①------------------------------------------ 子函數&#xff1a;主函數&#xff1a;當定義了COMMENT_FLAG該宏&#xff0c;且其為0&#xff0c;則運行結果如下&#xff1a;只執行了sub_func_1函…

21、鴻蒙Harmony Next開發:組件導航(Navigation)

目錄 設置頁面顯示模式 設置標題欄模式 設置菜單欄 設置工具欄 路由操作 頁面跳轉 頁面返回 頁面替換 頁面刪除 移動頁面 參數獲取 路由攔截 單例跳轉 子頁面 頁面顯示類型 頁面生命周期 頁面監聽和查詢 頁面轉場 關閉轉場 自定義轉場 共享元素轉場 跨包…

“外賣大戰”正在改變國內“大零售”

出品 | 何璽排版 | 葉媛7月18日&#xff0c;市場監管總局約談美團、餓了么、京東三家外賣平臺&#xff0c;要求“理性競爭、規范促銷”&#xff0c;劍指近期愈演愈烈的“0元購”“0.1秒殺”等外賣補貼亂象。但約談之后&#xff0c;平臺們是真整改&#xff0c;還是玩話術&#x…

當CAN握手EtherCAT:視覺檢測系統的“雙芯合璧”時代來了

在汽車制造的高速生產線上&#xff0c;設備間的“語言不通”曾是工程師們的頭疼事&#xff1a;CAN總線像踏實的老司機&#xff0c;穩扎穩打傳輸傳感器數據&#xff1b;而EtherCAT網關則是追求極致速度的“閃電俠”&#xff0c;主導著實時控制的重任。當視覺檢測系統需要同時對接…