08.19總結

連通性

在無向圖中,若任意兩點間均存在路徑相連,則該圖稱為連通圖。
若刪除圖中任意一個頂點后,剩余圖仍保持連通性,則該圖為點雙連通圖。
若刪除圖中任意一條邊后,圖仍保持連通性,則該圖為邊雙連通圖。
在有向圖中,若將所有有向邊視為無向邊后得到的圖是連通的,則稱該圖為弱連通圖。
若在有向圖中任意兩點間均存在雙向可達路徑,則該圖稱為強連通圖。

強連通分量

強連通分量(Strongly Connected Components,簡稱SCC)是指圖中的極大強連通子圖。

在有向圖的 DFS 生成樹中,存在四種類型的邊:

  1. 樹邊:黑色實線,表示從父節點指向未被訪問的子節點
  2. 返祖邊:紅色虛線,指向祖先節點的邊
  3. 前向邊:綠色虛線,指向子樹中節點的邊
  4. 橫叉邊:藍色虛線,指向已訪問過且既非祖先也非子樹中的節點

需要注意的是,前向邊和橫叉邊僅存在于有向圖的DFS生成樹中,而無向圖只有樹邊和返祖邊。
關于 DFS 生成樹與強連通分量(SCC)的關系:

  • 在某個 SCC 中,最先被訪問的節點 uuu 具有重要特性
  • 該 SCC 中其他所有節點必定位于以 uuu為根的子樹中

證明過程如下:
假設 SCC 中存在節點 vvv 不在 uuu 的子樹中:
uuuvvv 的路徑必然包含離開該子樹的邊(橫叉邊或返祖邊)
這類邊指向的節點必須已被訪問過
由于 uuuvvv 屬于一個SCC,訪問這些更早被訪問的節點時應該能到達uuu
這與u是最先被訪問的前提矛盾,故假設不成立。

實現

void tarjan(int u) {low[u] = dfn[u] = ++tot;sta.push(u);in[u] = 1;for (auto v : ve[u]) {if (!dfn[v]) {tarjan(v);low[u] = min(low[u], low[v]);} else if (in[v]) {low[u] = min(low[u], dfn[v]);}}if (dfn[u] == low[u]) {vector <int> vnow;while (vnow.empty() || vnow.back() != u) {vnow.push_back(sta.top());in[sta.top()] = 0;sta.pop();}scc.push_back(vnow);}
}

縮點

在圖論問題中,我們可以將強連通分量(SCC)縮成一個節點,從而將原圖轉化為有向無環圖(DAG)。在進行縮點操作時,需要特別注意原圖與新圖中邊的對應關系。

邊雙連通分量

將強連通分量中的有向邊替換為無向邊后,就形成了邊雙連通分量。這是因為在強連通分量中,任意兩點 uuuvvv 之間都存在 uuuvvvvvvuuu 的路徑。當轉換為無向邊時,這些路徑保證了任意兩點之間至少存在兩條不同的路徑連接,這正是邊雙連通分量 (BCC) 的定義特征。

實現

void tarjan(int u, int fa) {low[u] = dfn[u] = ++tot;sta.push(u);in[u] = 1;int mark = 0;for (auto v : ve[u]) {if (v == fa) {if (!mark) {mark = 1;} else {low[u] = min(low[u], dfn[v]);}continue;}if (!dfn[v]) {tarjan(v, u);low[u] = min(low[u], low[v]);} else {low[u] = min(low[u], dfn[v]);}}if (dfn[u] == low[u]) {vector <int> vnow;while (vnow.empty() || vnow.back() != u) {vnow.push_back(sta.top());in[sta.top()] = 0;sta.pop();}bcc.push_back(vnow);}
}

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

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

相關文章

車e估牽頭正式啟動乘用車金融價值評估師編制

8月13日&#xff0c;汽車金融行業職業能力評價規范編制啟動工作會議在廣州圓滿落幕。本次會議由中國機械工業聯合會機械工業人才評價中心主辦&#xff0c;廣州穗圣信息科技有限公司&#xff08;車e估&#xff09;承辦。會議匯聚了眾多行業精英&#xff0c;包括中國機械工業聯合…

清空 github 倉庫的歷史提交記錄(創建新分支)

想在 現有倉庫中創建一個新分支 master&#xff0c;刪除原來的 main&#xff0c;然后把 master 重命名為 main&#xff0c;并且清空歷史。可以用下面一條完整的命令序列操作&#xff1a; # 1. 創建一個沒有歷史的新分支 master git checkout --orphan master# 2. 添加當前所有文…

使用B210在Linux下實時處理ETC專用短程通信數據(2)-CPU單核高速數據處理

在上一篇文章中&#xff0c;使用Octave初步驗證了ETC車聯數據的格式。然而&#xff0c;Octave無法實時處理20M的采樣帶寬。我們本節通過C語言&#xff0c;重寫 Octave程序&#xff0c;實現實時處理&#xff0c;涉及下面三個關鍵特點。 文章目錄1. 全靜態內存2. 使用環狀緩存3 無…

Spark 運行流程核心組件(二)任務調度

1、調度策略參數默認值說明spark.scheduler.modeFIFO調度策略&#xff08;FIFO/FAIR&#xff09;spark.locality.wait3s本地性降級等待時間spark.locality.wait.processspark.locality.waitPROCESS_LOCAL 等待時間spark.locality.wait.nodespark.locality.waitNODE_LOCAL 等待時…

Orbbec---setBoolProperty 快捷配置設備行為

在奧比中光&#xff08;Orbbec&#xff09;SDK&#xff08;通常稱為ob庫&#xff09;中&#xff0c;setBoolProperty函數是用于設置設備或傳感器的布爾類型屬性的核心接口。它主要用于開啟/關閉設備的某些功能或模式&#xff0c;是配置設備行為的重要方法。 函數原型與參數解析…

[OWASP]智能體應用安全保障指南

1.關鍵組件定義 KC1 生成式語言模型&#xff08;Generative Language Models&#xff09; KC1.1 大語言模型&#xff08;LLMs&#xff09;&#xff1a;作為代理的“大腦”&#xff0c;基于預訓練基礎模型&#xff08;如 GPT 系列、Claude、Llama、Gemini&#xff09;&#xff…

【Vivado TCL 教程】從零開始掌握 Xilinx Vivado TCL 腳本編程(三)

【Vivado TCL 教程】從零開始掌握 Xilinx Vivado TCL 腳本編程&#xff08;三&#xff09; 系列文章目錄 1、VMware Workstation Pro安裝指南&#xff1a;詳細步驟與配置選項說明 2、VMware 下 Ubuntu 操作系統下載與安裝指南 3、基于 Ubuntu 的 Linux 系統中 Vivado 2020.1 下…

AI與大數據驅動下的食堂采購系統源碼:供應鏈管理平臺的未來發展

在數字化浪潮不斷加速的今天&#xff0c;很多企業和機構都在追求一個目標&#xff1a;如何把“效率”與“成本”做到最佳平衡。對于學校、企事業單位的食堂來說&#xff0c;采購環節就是重中之重。往小了說&#xff0c;它關系到食堂員工的工作體驗&#xff1b;往大了說&#xf…

HarmonyOS 實戰:學會在鴻蒙中使用第三方 JavaScript 庫(附完整 Demo)

摘要 在鴻蒙&#xff08;HarmonyOS NEXT / ArkTS&#xff09;開發中&#xff0c;我們大部分業務邏輯和 UI 都是用 ArkTS 寫的。不過在做一些數據處理、網絡請求、工具函數或者復雜算法時&#xff0c;完全沒必要“重復造輪子”。這時候就可以直接引入 JavaScript 的第三方庫。鴻…

C++實現教務管理系統,文件操作賬戶密碼登錄(附源碼)

教務管理系統項目介紹 項目概述 這是一個基于C開發的教務管理系統&#xff0c;提供了學生、教師和系統管理員三種角色的功能模塊&#xff0c;實現了教務信息的錄入、查詢、修改和刪除等基本操作。系統采用文件存儲方式保存數據&#xff0c;具有簡單易用、功能完備的特點。 項…

《C++進階之STL》【二叉搜索樹】

【二叉搜索樹】目錄前言&#xff1a;------------概念介紹------------1. 什么是二叉搜索樹?2. 二叉搜索樹的性能怎么樣&#xff1f;------------基本操作------------一、查找操作思想步驟簡述二、插入操作目標步驟簡述三、刪除操作目標步驟簡述------------代碼實現--------…

Orange的運維學習日記--47.Ansible進階之異步處理

Orange的運維學習日記–47.Ansible進階之異步處理 文章目錄Orange的運維學習日記--47.Ansible進階之異步處理Playbook 執行順序原理可選執行策略調整并發連接數&#xff1a;forks 參數查看與修改 forks性能調優建議分批執行全局任務&#xff1a;serial 關鍵字serial 用法示例應…

從一個ctf題中學到的多種php disable_functions bypass 姿勢

題目介紹 題目是Lilctf2025 的php-jail-is-my-cry 比賽鏈接&#xff1a;https://lilctf.xinshi.fun/ 題目環境前半部分是 php最近的phar 新 trick 大佬的原理分析 https://fushuling.com/index.php/2025/07/30/%e5%bd%93include%e9%82%82%e9%80%85phar-deadsecctf2025-baby-we…

從繁瑣到優雅:Java Lambda 表達式全解析與實戰指南

在 Java 8 之前&#xff0c;我們習慣了用匿名內部類處理回調、排序等場景&#xff0c;代碼中充斥著大量模板化的冗余代碼。直到 Java 8 引入 Lambda 表達式&#xff0c;這一局面才得以徹底改變。作為一名深耕 Java 多年的技術專家&#xff0c;我見證了 Lambda 表達式如何從一個…

《當 AI 學會 “思考”:大語言模型的邏輯能力進化與隱憂》

引言&#xff1a;AI “思考” 的時代信號?大語言模型展現邏輯能力的典型場景&#xff1a;如復雜問題推理、多步驟任務規劃的實例&#xff08;如 AI 輔助撰寫科研思路、進行案件邏輯梳理等&#xff09;?提出核心議題&#xff1a;大語言模型邏輯能力的進化究竟達到了怎樣的程度…

企業知識管理革命:RAG系統在大型組織中的落地實踐

企業知識管理革命&#xff1a;RAG系統在大型組織中的落地實踐 &#x1f31f; Hello&#xff0c;我是摘星&#xff01; &#x1f308; 在彩虹般絢爛的技術棧中&#xff0c;我是那個永不停歇的色彩收集者。 &#x1f98b; 每一個優化都是我培育的花朵&#xff0c;每一個特性都是我…

MySQL事務篇-事務概念、并發事務問題、隔離級別

事務事務是一組不可分割的操作集合&#xff0c;這些操作要么同時成功提交&#xff0c;要么同時失敗回滾。acid事物的四大特性原子性最小工作單元&#xff0c;要么同時成功&#xff0c;要么同時失敗。例如A轉賬300給B,A賬戶-300與B賬戶300必須滿足操作原子性&#xff0c;避免出現…

C++高頻知識點(二十三)

文章目錄111. 談談atomic1. 什么是原子操作&#xff1f;2. std::atomic 的基本使用示例&#xff1a;基本使用3. 原子操作方法4. 內存模型與順序一致性112. 引用成員變量是否占空間?1. 引用成員變量的定義2. 內存占用情況1. 成員變量的實際占用2. 類的總大小代碼分析113. C中深…

云存儲的高效安全助手:阿里云國際站 OSS

在這個數據爆炸的時代&#xff0c;數據存儲和管理成為了眾多企業和個人面臨的一大挑戰。想象一下&#xff0c;你是一位視頻博主&#xff0c;隨著粉絲量的增長&#xff0c;視頻素材越來越多&#xff0c;電腦硬盤根本裝不下&#xff0c;每次找素材都要花費大量時間。又或者你是一…

【線性基】P4301 [CQOI2013] 新Nim游戲|省選-

本文涉及知識點 C貪心 位運算、狀態壓縮、枚舉子集匯總 線性基 P4301 [CQOI2013] 新Nim游戲 題目描述 傳統的 Nim 游戲是這樣的&#xff1a;有一些火柴堆&#xff0c;每堆都有若干根火柴&#xff08;不同堆的火柴數量可以不同&#xff09;。兩個游戲者輪流操作&#xff0c;…