LibreOJ 137. 最小瓶頸路(加強版) 題解 Kruscal重構樹 ST表

聲明:本題目是LibreOJ 136. 最小瓶頸路 題解 最小生成樹 倍增加強版,建議先學習簡單版的做法。
題目鏈接:LibreOJ 137. 最小瓶頸路(加強版)
題目描述:

給定一張無向圖,詢問兩個結點之間的最小瓶頸路。u和v兩個結點之間最小瓶頸路指的是u和v的每條路徑中經過的最大邊權的最小值。強制在線,期望實現詢問時間復雜度為O(1)的算法。

題解:

給出結論:無向圖的最小瓶頸路與其最小生成樹上兩個結點之間最小瓶頸路值相等。
上面結論的證明我們可以參考Krusca求解最小生成樹的過程,對于當前可以加入的一條邊(u, v, w)uv之間的最小瓶頸路當前這條邊,因為在之前的過程中經過權重比w小的邊不能使uv連通,根據這個過程我們便可以發現第一次讓uv相連的邊的權重就是最小瓶頸路(這也是為什么Kruscal重構樹可以求最小瓶頸路的原理),而不難發現這個值也就是uv路徑上的邊權最大值。
有了上面的說明,我們可以構造Kruscal重構樹,具體地:
使用Kruscal算法構造MST的時候,每選擇一條邊的時候,我們創建一個新的結點w,將u的根節點與w之間連接雙向邊,將v的根節點與w連接雙向邊,w的點權為當前選擇的邊的邊權。這樣構造出來的樹叫做Kruscal重構樹,不難發現,在該樹中兩個結點的LCA的點權為其最小瓶頸路(上面已經說明第一次合并的時候的邊權即為最小瓶頸路,而LCA的點權就是第一次合并時選擇邊的邊權)。我們不難發現深度越低的點的點權越大。
我們不難發現若初始有n個結點,那么Kruscal重構樹一共有2n-1個結點,因此現在的問題變成了:需要快速查詢兩個結點的LCA的點權。如果題目不要求在線,那么我們可以通過TarjanO(n+m)的復雜度求出所有詢問的LCA
如果要求在線,我們可以借助Eular序和ST表實現,我們在DFS的過程中,在進入DFS的時候與訪問完某個兒子結點的時候對當前結點進行標號,同時記錄每個結點的第一次編號為in[u]。通過這樣操作后,對于詢問u和詢問v,那么對于編號in[u]~in[v](或者in[v]~in[u])中的所有編號均為LCA(u,v)所在子樹的結點的編號(這一點很容易思考,讀者可以自己思考)。
由于深度越大的點的點權越大,所以有了Eular序之后,問題就變成了詢問in[u]~in[v](或者in[v]~in[u])上的點權最小值,由于編號是連續的,我們可以使用ST表進行O(1)復雜度的查詢。

代碼:LibreOJ137

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

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

相關文章

【MySQL 系列】在 Windows 上安裝 MySQL

在 Windows 平臺上安裝 MySQL 很簡單,并不需要太復雜的步驟。按照本文的步驟操練起來就可以了。 文章目錄 1、下載 MySQL 安裝程序2、安裝 MySQL 數據庫2.1、選擇安裝類型2.2、檢查所需組件2.3、安裝所選產品組件2.4、產品配置2.5、配置高可用性2.6、配置服務器類型…

【leetcode】 劍指 Offer學習計劃(java版本含注釋)(下)

目錄 前言第十六天(排序)劍指 Offer 45. 把數組排成最小的數(中等)劍指 Offer 61. 撲克牌中的順子(簡單) 第十七天(排序)劍指 Offer 40. 最小的k個數(簡單) 第…

c++11多線程:call_once

文章目錄 call_once示例一示例二 call_once std::call_once是 C11 標準庫中的一個函數,用于確保某個函數只會被調用一次。 單例設計模式是一種常見的設計模式,用于確保某個類只能創建一個實例。由于單例實例是全局唯一的,因此在多線程環境中…

YOLO系列中的“data.yaml”詳解!

專欄介紹:YOLOv9改進系列 | 包含深度學習最新創新,主力高效漲點!!! 一、data.yaml介紹 YOLO系列中的data.yaml文件包含了YOLO系列模型運行所需要的數據集路徑、數據集中的類別數及標簽。數據集路徑可以用絕對路徑也可以…

Python實現股票信息查詢

目前兩個常用的股票信息CPI: 騰訊行情CTPAPI接口源碼 新浪行情CTPAPI 使用requests模塊爬取股票信息,這里以查詢股票市值為例。 一、根據股票名稱查詢股票代碼 在python文件夾下設置兩個表格GPLIST.xlsx,其中是A股全部代碼和股票名稱&#…

如何在飛書接入ChatGPT并結合內網穿透實現公網遠程訪問智能AI助手

文章目錄 前言環境列表1.飛書設置2.克隆feishu-chatgpt項目3.配置config.yaml文件4.運行feishu-chatgpt項目5.安裝cpolar內網穿透6.固定公網地址7.機器人權限配置8.創建版本9.創建測試企業10. 機器人測試 前言 在飛書中創建chatGPT機器人并且對話,在下面操作步驟中…

MySQL 高可用解決方案(雙主雙從)

1.環境說明 操作系統:centos7.7 主服務器:node2(192.168.1.102) 從服務器:node3(192.168.1.103) keepalived中虛擬ip(VIP):192.168.1.100 2.準備事項 主庫和從庫數據庫的版本一致把主庫的數據同步給從庫一份 #對主庫進行全局讀鎖定 FLUSH…

GEE代碼條帶問題——sentinel-1接縫處理的問題

問題 我有興趣確定 NDVI 損失最大的年份。我創建了一個函數來收集所有陸地衛星圖像并應用預處理。當我導出結果以識別 NDVI 損失最大年份時,生成的數據產品與陸地衛星場景足跡有可怕的接縫線。造成這種情況的原因是什么以及如何調整代碼? sentinel1數據…

flutter之終極報錯

看到這個報錯頭都大了 一開始在網上各種搜搜,然后有人說是flutter版本的問題,改完版本之后還是不對,又是各種搜搜搜 有人說是環境變量的問題,后來改了環境變量,媽的,竟然還不行,想砸電腦的心都…

Xcode :Could not build module ‘WebKit‘ 已驗證解決

問題&#xff1a;Could not build module WebKit 具體報錯如下&#xff1a; error: type argument nw_proxy_config_t (aka struct nw_proxy_config *) is neither an Objective-C object nor a block type property (nullable, nonatomic, copy) NSArray<nw_proxy_config_…

C++學習筆記:set和map

set和map set什么是setset的使用 關聯式容器鍵值對 map什么是mapmap的使用map的插入方式常用功能map[] 的靈活使用 set 什么是set set是STL中一個底層為二叉搜索樹來實現的容器 若要使用set需要包含頭文件 #include<set>set中的元素具有唯一性(因此可以用set去重)若用…

【java-面試題】start和run的區別

【java-面試題】start和run的區別 在run方法內部&#xff0c;只是單純的描述了該線程要執行的內容。run方法是線程的入口。 在start方法內部&#xff0c;會調用到系統api&#xff0c;從而在系統內核中創建出線程&#xff0c;創建線程后&#xff0c;再自動調用run方法。 在代碼…

掌握未來技術:一站式深度學習學習平臺體驗!

介紹&#xff1a;深度學習是機器學習的一個子領域&#xff0c;它模仿人腦的分析和學習能力&#xff0c;通過構建和訓練多層神經網絡來學習數據的內在規律和表示層次。 深度學習的核心在于能夠自動學習數據中的高層次特征&#xff0c;而無需人工進行復雜的特征工程。這種方法在圖…

大模型筆記:RAG(Retrieval Augmented Generation,檢索增強生成)

1 大模型知識更新的困境 大模型的知識更新是很困難的&#xff0c;主要原因在于&#xff1a; 訓練數據集固定,一旦訓練完成就很難再通過繼續訓練來更新其知識參數量巨大,隨時進行fine-tuning需要消耗大量的資源&#xff0c;并且需要相當長的時間LLM的知識是編碼在數百億個參數中…

格式規范性知識的探究式學習

對于格式規范性這種規定性的知識&#xff0c;可以采用“增刪改”的方式進行控究式學習。 #include<stdio.h>int main(){printf("%.1f\n", 8.0/5.0);return 0;} 這個printf語句分兩部分&#xff0c;本身的功能就是格式化輸出&#xff0c;因此參數完全是格式化…

一些C語言知識

C語言的內置類型&#xff1a; char short int long float double C99中引入了bool類型&#xff0c;用來表示真假的變量類型&#xff0c;包含true&#xff0c;false。 這個代碼的執行結果是什么&#xff1f;好好想想哦&#xff0c;坑挺多的。 #include <stdio.h>int mai…

STM32(5) GPIO(2)輸出

1.點亮LED 1.1 推挽接法和開漏接法 要想點亮LED&#xff0c;有兩種接法 推挽接法&#xff1a; 向寄存器寫1&#xff0c;引腳輸出高電平&#xff0c;LED點亮&#xff1b;向寄存器寫0&#xff0c;引腳輸出低電平&#xff0c;LED熄滅。 開漏接法&#xff1a; 向寄存器寫0&…

Kubernetes operator 前置知識篇

云原生學習路線導航頁&#xff08;持續更新中&#xff09; 本文是 Kubernetes operator學習 系列的前置知識篇&#xff0c;幫助大家對 Operator 進行初步了解Kubernetes operator學習系列 快捷鏈接 Kubernetes operator 前置知識篇Kubernetes operator&#xff08;一&#xff0…

《精益DevOps》:填補IT服務交付的認知差距,實現高效可靠的客戶期望滿足

寫在前面 在當今的商業環境中&#xff0c;IT服務交付已經成為企業成功的關鍵因素之一。然而&#xff0c;實現高效、可靠、安全且符合客戶期望的IT服務交付卻是一項艱巨的任務。這要求服務提供商不僅具備先進的技術能力&#xff0c;還需要擁有出色的組織協作、流程管理和態勢感…

UniApp項目處理小程序分包

目前 uniApp也成為一種 App端開發的大趨勢 因為在目前跨端 uniApp可以說相當優秀 可以同時兼容 H5 PC 小程序 APP 的技術 目前市場屈指可數 那么 說到微信小程序 自然就要處理分包 因為微信小程序對應用大小限制非常銘感 限制在2MB 超過之后就會無法真機調試與打包 不過需要注…