藍橋備賽指南(14):樹的直徑與重心

樹的直徑

什么是樹的直徑?樹的直徑是樹上最長的一條鏈,當然這條鏈并不唯一,所以一棵樹可能有多條直徑。直徑由兩個頂點u、v來決定,若由一條直徑(u,v),則滿足一下性質:

1)u、v的度數均為1;

2)在任意一個點為根的樹上,u、v必然存在一個點作為最深的葉子節點。深度就是點距離根節點的距離。

如圖所示:

?樹的直徑有兩種求法:第一種就是“跑兩遍dfs”;第二種就是樹形dp。

由于直徑端點u、v必然存在一個是深度最深的點,那么我們可以在以任意節點為根地樹上跑一次dfs求所有點的深度,選取深度最大的點(可能有多個,任取一個)就是v

于是就可以得到兩個端點u、v,從而確定樹的直徑,其長度就是路徑上點的個數,也就等于以u為根的樹中的dep[v]。

習題:1.賣樹 - 藍橋云課

代碼:

#include<bits/stdc++.h>
using namespace std;using ll = long long;
const int N = 1e5 + 9;
vector<int>g[N];int dep1[N], depu[N], depv[N];void dfs(int x, int fa, int dep[]) {dep[x] = dep[fa] + 1;for (const auto& y : g[x]) {if (y == fa)continue;dfs(y, x, dep);}
}void solve() {ll n, k, c; cin >> n >> k >> c;for (int i = 1; i < n; ++i) {int u, v; cin >> u >> v;g[u].push_back(v), g[v].push_back(u);}dep1[0] = depu[0] = depv[0] = -1;dfs(1, 0, dep1);int u = 1;for (int i = 1; i <= n; ++i) if (dep1[i] > dep1[u]) u = 1;dfs(u, 0, depu);int v = 1;for (int i = 1; i <= n; ++i) if (depu[i] > depu[v])v = i;dfs(v, 0, depv);ll ans = 0;for (int i = 1; i <= n; ++i) {ans = max(ans, max(depu[i], depv[i]) * k - dep1[i] * c);}cout << ans << endl;for (int i = 1; i <= n; ++i) g[i].clear();
}int main() {int t; cin >> t;while (t--) {solve();}return 0;
}

樹的重心

樹的重心是指某個點,將其刪除后,可以使得剩余聯通塊的大小大的點。

也就等價于以某個點為根的樹,將根刪除后,剩余的若干顆子樹的大小最小。

性質:

性質一

重心的若干顆子樹的大小一定<=n;

除了重心以外的所有其他點,都必然存在一顆節點個數>n的子樹。?

性質二

一棵樹至多有兩顆重心,如果存在兩個重心,則必然相鄰;

將連接兩個重心的邊擦除后,一定劃分為兩顆大小相等的樹;

性質三

樹種所有點到某個點的距離和中,到重心的距離和是最小的;

如果有兩個重心,那么它們的距離和一樣。反過來,距離和最小的點一定是重心。

最后,樹的重心問題可以處理一些最優化、最小化問題。

如何求解樹的重心???

模板:

void dif(int x, int y) {f[x] = 1, m[x] = 0;for (const auto& z : g[x]) {if (z == y) continue;dif(z, x);f[x] += f[z];m[x] = max(m[x], f[x]);}m[x] = max(m[x], n - f[x]);if (m[x] <= n / 2) v.push_back(x);
}

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

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

相關文章

AIDD-人工智能藥物設計-網絡藥理學-多組學與網絡藥理學分析揭示龜齡集治療少精癥的機制

IF6.7|多組學與網絡藥理學分析揭示龜齡集治療少精癥的機制 2024年10月28日&#xff0c;海軍軍醫大學張衛東教授團隊在Phytomedicine&#xff08;IF6.7&#xff09;上發表了題為“Multi-omics and network pharmacology approaches reveal Gui-Ling-Ji alleviates oligoastheno…

搜狗拼音輸入法純凈優化版:去廣告,更流暢輸入體驗15.2.0.1758

前言 搜狗輸入法電腦版無疑是裝機必備的神器。它打字精準&#xff0c;詞庫豐富全面&#xff0c;功能強大&#xff0c;極大地提升了輸入效率。最新版的搜狗拼音輸入法更是借助AI技術&#xff0c;讓打字變得既準確又高效。而搜狗輸入法的去廣告精簡優化版&#xff0c;通過移除廣…

Franka雙臂機器人:多領域革新與核心技術深度解析

雙臂Franka機器人以類人化操作能力、毫秒級力控響應及智能協同算法為核心&#xff0c;持續推動工業自動化、醫療輔助與農業生產的革新進程。本文深度解析其技術突破與跨行業實踐案例。 Franka雙臂優勢&#xff1a; 高靈活度&#xff1a;7自由度設計&#xff0c;模擬人類手臂運…

Django視圖詳解

前言 歡迎來到我的博客 個人主頁:北嶺敲鍵盤的荒漠貓-CSDN博客 一、Django視圖是什么&#xff1f; 視圖&#xff08;View&#xff09; 是Django處理HTTP請求的核心組件。它接收一個HttpRequest對象&#xff0c;處理業務邏輯&#xff0c;并返回一個HttpResponse對象&#xff08…

【工具變量】上市公安企業社會信任數據集(2004-2023年)

企業社會信任是衡量企業與社會之間信任度的重要指標&#xff0c;反映了企業在公眾眼中的信譽和可靠性。社會信任對企業的持續發展和品牌形象有著至關重要的影響。本分享數據參考張維迎&#xff08;2002年&#xff09;的做法&#xff0c;采用中國企業家調查系統的地區信任調查數…

Python爬取數據(二)

一.example2包下的 1.re模塊的compile函數使用 import repatternre.compile(r\d) print(pattern) 2.match的方法使用 import re patternre.compile(r\d) # m1pattern.match(one123twothree345four) #參數2&#xff1a;指定起始位置(包含),參數3&#xff1a;終止位置(包含),…

spring之Bean的循環依賴問題、反射機制手寫Spring框架、Spring IoC注解式開發

一、Bean的循環依賴問題 1.什么是Bean的循環依賴 A對象中有B屬性。B對象中有A屬性。這就是循環依賴。我依賴你&#xff0c;你也依賴我。 比如&#xff1a;丈夫類Husband&#xff0c;妻子類Wife。Husband中有Wife的引用。Wife中有Husband的引用。 public class Husband {priv…

狀態機的基本使用

狀態機 1. 什么是狀態機 1.1 場景 在業務代碼中對一些業務狀態進行硬編碼&#xff0c;如果有一天更改了業務邏輯就需要更改代碼&#xff0c;不方便進行系統擴展和維護。 if (status 狀態1) {// TODO } else if(status 狀態2) {// TODO } ...另外對訂單狀態的管理是散落在…

22 | 如何繼續提升 Go 開發技術?

提示&#xff1a; 所有體系課見專欄&#xff1a;Go 項目開發極速入門實戰課&#xff1b;歡迎加入 云原生 AI 實戰營 星球&#xff0c;12 高質量體系課、20 高質量實戰項目助你在 AI 時代建立技術競爭力&#xff08;聚焦于 Go、云原生、AI Infra&#xff09;。 「Go 項目開發極速…

LLM Agents項目推薦:MetaGPT、AutoGen、AgentVerse詳解

這一部分我們將深入介紹三大備受關注的LLM Agents項目&#xff1a;MetaGPT、AutoGen和AgentVerse&#xff0c;包括它們的背景、設計思路、主要功能、技術亮點以及典型應用場景。 1. MetaGPT&#xff1a;讓AI像軟件工程團隊一樣協作 項目背景 MetaGPT由Huang et al.于2023年提…

好數(藍橋杯2024省賽B組)

題目描述 一個整數如果按從低位到高位的順序&#xff0c;奇數位&#xff08;個位、百位、萬位……&#xff09;上的數字是奇數&#xff0c;偶數位&#xff08;十位、千位、十萬位……&#xff09;上的數字是偶數&#xff0c;我們就稱之為“好數”。 給定一個正整數 N&#xf…

STM32單片機入門學習——第26節: [9-2] USART串口外設

寫這個文章是用來學習的,記錄一下我的學習過程。希望我能一直堅持下去,我只是一個小白,只是想好好學習,我知道這會很難&#xff0c;但我還是想去做&#xff01; 本文寫于&#xff1a;2025.04.08 STM32開發板學習——第26節: [9-2] USART串口外設 前言開發板說明引用解答和科普…

【學Rust寫CAD】31 muldiv255函數(muldiv255.rs,已經取消)

源碼 // Calculates floor(a*b/255 0.5) #[inline] pub fn muldiv255(a: u32, b: u32) -> u32 {// The deriviation for this formula can be// found in "Three Wrongs Make a Right" by Jim Blinn.let tmp a * b 128;(tmp (tmp >> 8)) >> 8 }代…

LLM+js實現大模型對話

代碼運行效果圖&#xff1a;前提是你有一個可用的openai服務&#xff0c;然后用下面一個html頁即可啟動 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthd…

用claude3.7,不到1天寫了一個工具小程序(11個工具6個游戲)

一、功能概覽和本文核心 本次開發&#xff0c;不是1天干擼&#xff0c;而是在下班后或早起搞的&#xff0c;總體加和計算了一下&#xff0c;大概1天的時間&#xff08;12個小時&#xff09;&#xff0c;平常下班都是9點的衰仔&#xff0c;好在還有雙休&#xff0c;謝天謝地。 …

C++實現文件斷點續傳:原理剖析與實戰指南

文件傳輸示意圖 一、斷點續傳的核心價值 1.1 大文件傳輸的痛點分析 網絡閃斷導致重復傳輸&#xff1a;平均重試3-5次。 傳輸進度不可回溯&#xff1a;用戶無法查看歷史進度。 帶寬利用率低下&#xff1a;每次中斷需從頭開始。 1.2 斷點續傳技術優勢 指標傳統傳輸斷點續傳…

升級 SAP S/4 HANA 之 EWM 攻略

目錄 簡介 知識點 數據遷移 簡介 倉庫管理&#xff0c;SAP 升級不管是否啟動 EWM 功能&#xff0c;評估 EWM 是必經之路&#xff0c;不僅是因為 EWM 是 SAP 主推的倉庫解決方案&#xff0c;更是其功能強大而便捷&#xff0c;不管是簡易倉庫、復雜倉庫、立體倉庫、高架倉庫、…

知識表示方法之六:過程表示法(Procedural Representation)

在人工智能的發展史中&#xff0c;關于知識的表示方法曾存在兩種不同的觀點。一種觀點認為知識主要是陳述性的&#xff0c;其表示方法應著重將其靜態特性&#xff0c;即事物的屬性以及事物間的關系表示出來&#xff0c;稱以這種觀點表示知識的方法為陳述式或說明式表示法&#…

綠色供應鏈管理體系認證:開啟企業可持續發展的綠色新篇章

在全球“雙碳”目標驅動下&#xff0c;綠色供應鏈管理已成為企業高質量發展的核心議題。據國際權威機構預測&#xff0c;到2030年&#xff0c;綠色供應鏈相關市場規模將突破萬億美元。在此背景下&#xff0c;綠色供應鏈管理體系認證不僅是企業合規的“通行證”&#xff0c;更是…

MATLAB如何打印一個桃心形狀

在MATLAB中打印一個桃心形狀&#xff0c;您可以使用繪圖函數來創建一個心形圖案。以下是一個簡單的例子&#xff0c;展示了如何使用MATLAB繪制一個心形&#xff1a; 定義心形的參數方程&#xff1a;心形可以通過一組參數方程來描述。 使用MATLAB的繪圖函數&#xff1a;plot函…