Kruskal算法刷題筆記

理論基礎:

例題:

卡碼網---53:尋寶

題目

題目描述

在世界的某個區域,有一些分散的神秘島嶼,每個島嶼上都有一種珍稀的資源或者寶藏。國王打算在這些島嶼上建公路,方便運輸。

不同島嶼之間,路途距離不同,國王希望你可以規劃建公路的方案,如何可以以最短的總公路距離將 所有島嶼聯通起來。?

給定一張地圖,其中包括了所有的島嶼,以及它們之間的距離。以最小化公路建設長度,確保可以鏈接到所有島嶼。

輸入描述

第一行包含兩個整數V 和 E,V代表頂點數,E代表邊數?。頂點編號是從1到V。例如:V=2,一個有兩個頂點,分別是1和2。

接下來共有 E 行,每行三個整數 v1,v2 和 val,v1 和 v2 為邊的起點和終點,val代表邊的權值。

輸出描述

輸出聯通所有島嶼的最小路徑總距離

筆記:

這道題的總體思路是:先將所有邊進行權值排序優先選擇權值小的邊,然后從權值最小的邊開始判斷該邊左右兩點是否為同一個祖先,如果為同一祖先那么聯通圖中就存在環,否則我們就將這兩點加入到聯通圖中,這里就用到了我們并查集的思路。然后我們將同意聯通圖中的帶權邊的權值加起來就是連接所有節點的最小連通子圖。

最小生成樹問題解決的都是求所給帶權有向圖中的所有節點的最小連通子圖,prim算法是從節點的角度出發,不斷選擇里最小生成樹最近的節點從而達到最小聯通子圖,而kruskal算法是從邊的角度出發,對邊的權值進行排序,優先選擇權值最小的邊加入到最小生成樹中,從而構成最小聯通子圖。

prim算法是將符合條件的點一個一個加入到最小生成樹中,kruskal算法是將符合條件的帶權邊一條一條的加入到最小生成樹中。kruskal算法是從所有帶權邊中尋找符合條件的邊加入到最小生成樹。

#include<bits/stdc++.h>
using namespace std;struct Edge{int l;int r;int val;
};bool s_rule(const Edge& a, const Edge& b){return a.val < b.val;
}vector<int> father;void init(int n){for(int i = 1; i <= n; i++){father[i] = i;}
}int find(int x){return x == father[x] ? x : father[x] = find(father[x]);
}void join(int u, int v){u = find(u);v = find(v);father[v] = u;
}int main(){int v,e;int res = 0;cin >> v >> e;father = vector<int>(v + 1, 0);vector<Edge> edges;while(e--){int v1, v2, val;cin >> v1 >> v2 >> val;edges.push_back({v1, v2, val});}sort(edges.begin(), edges.end(), s_rule);int n = edges.size();init(v);for(int i = 0; i < n; i++){if(find(edges[i].l) != find(edges[i].r)){join(edges[i].l, edges[i].r);res += edges[i].val;}}cout << res << endl;return 0;
}

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

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

相關文章

精選多個炫酷的數據可視化大屏(含源碼),拿走就用~

末尾有鏈接 演示地址&#xff1a;可視化大數據展示中心 (null.fit) 可視化大數據展示模板-科技語者 (chgskj.cn)

block性能考慮和線程安全

性能考慮 頻繁地創建和銷毀大量的 block 可能會對性能造成影響&#xff0c;特別是當這些 block 被拷貝到堆上時。同時&#xff0c;block 捕獲大量數據時也會增加內存使用。 在討論性能考慮時&#xff0c;主要關注的是 block 的創建、拷貝到堆上以及捕獲變量的成本。以下是針對…

【Java】:方法重寫、動態綁定和多態

目錄 一個生動形象的例子 場景設定 1. 方法重寫&#xff08;Method Overriding&#xff09; 2. 動態綁定&#xff08;Dynamic Binding&#xff09; 3. 多態&#xff08;Polymorphism&#xff09; 歸納關系&#xff1a; 重寫 概念 條件 重寫的示例 重載與重寫的區別 …

CUDA is not availabe on this machine.

assert torch.cuda.is_available(), "CUDA is not availabe on this machine." AssertionError: CUDA is not availabe on this machine. 這個錯誤信息表明你嘗試在PyTorch中使用CUDA&#xff08;也就是NVIDIA的GPU加速&#xff09;&#xff0c;但是你的機器上似乎沒…

libssh C++封裝之七(File)

1 概述 libssh是一個在客戶端和服務器端實現SSHv2協議的多平臺C庫。使用libssh,您可以遠程執行程序、傳輸文件、使用安全透明的隧道、管理公鑰等等。本文描述的對libssh客戶端功能的C++封裝。 libssh下載地址 3 實現 3.6 File File類型可以讀寫遠程文件。 3.6.1 File定義 …

使用rsync+lnotify實現遠程數據實時同步備份

目錄 1、定時備份與實時備份區別 2、配置客戶端 2.1、在客戶端安裝inotify-tools軟件。以便提供inotifywait inotifywatch 輔助工具程序 2.2 驗證&#xff1a;監控客戶端/data_backup目錄的變化 2.3 編寫自動同步腳本 2.4 后臺運行腳本 2.5 驗證數據實時同步效果 1、定…

【JS面試題】call - apply - bind

推薦嗶站一個老師的視頻講解&#xff0c;非常詳細易懂&#xff0c;5分鐘學會&#xff01;前端面試題&#xff1a;call、apply、bind的基本概念 這三個都是函數的方法&#xff0c;用來改變函數中的this指向&#xff01; 關于call的使用&#xff1a;&#xff08;3個方法類似&am…

SpringCloud:服務拆分和遠程調用

程序員老茶 &#x1f648;作者簡介&#xff1a;練習時長兩年半的Java up主 &#x1f649;個人主頁&#xff1a;程序員老茶 &#x1f64a; P? ?S : 點贊是免費的&#xff0c;卻可以讓寫博客的作者開心好久好久&#x1f60e; &#x1f4da;系列專欄&#xff1a;Java全棧&#…

使用socat做端口轉發

最近買的云上mongo數據庫但是數據庫不支持外網訪問&#xff0c;準備做iptables轉發但是一直不成功&#xff0c;騰訊云官方給予的解釋是受服務器內啟動的docker影響 做iptables轉發會沖突&#xff0c;所以只能另想辦法&#xff0c;我發現使用socat做轉發也很好用&#xff0c;所以…

JAVA_4

JAVA_4 一、JAVA內存總體架構二、棧的特點如下三、堆的特點如下四、方法區&#xff08;又叫靜態區&#xff0c;也是堆&#xff09;特點如下五、this的本質 一、JAVA內存總體架構 多個線程里面有&#xff1a;程序計數器、虛擬機棧、本地方法棧方法區&#xff1a;運行時常量池堆…

FPGA相關論文閱讀

一、Achieving 100Gbps Intrusion Prevention on a Single Server 論文名稱中文翻譯&#xff1a;在單臺服務器上實現100Gbps吞吐量的入侵防御檢測。 文章中的Mixed-1和Norm-1 二、Distributed Password Hash Computation on Commodity Heterogeneous Programmable Platforms…

【回溯 字典樹(前綴樹)】212. 單詞搜索 II

本文涉及知識點 回溯 字典樹&#xff08;前綴樹&#xff09; LeetCode212. 單詞搜索 II 給定一個 m x n 二維字符網格 board 和一個單詞&#xff08;字符串&#xff09;列表 words&#xff0c; 返回所有二維網格上的單詞 。 單詞必須按照字母順序&#xff0c;通過 相鄰的單元…

第3周 后端微服務基礎架構與前端項目聯調配備

第3周 后端微服務基礎架構與前端項目聯調配備 1. 微服務項目層次設計與Maven聚合1.1 項目層次設計1.2 父項目pom1.2.1 打包方式 1.3 創建通用 ************************************************************************************** 1. 微服務項目層次設計與Maven聚合 1.1…

電商平臺遭遇DDOS、CC攻擊有什么防護方案

電商平臺遭遇DDOS、CC攻擊有什么防護方案&#xff1f;在數字化浪潮的推動下&#xff0c;電商平臺已成為現代商業的重要組成部分&#xff0c;為消費者提供便捷、多樣的購物體驗。然而&#xff0c;隨著業務的發展&#xff0c;電商平臺也面臨著日益嚴峻的網絡安全挑戰&#xff0c;…

Tower for Mac:Git管理的新境界

Tower for Mac&#xff0c;讓您的Git管理進入新境界&#xff01;這款專為Mac用戶打造的Git客戶端&#xff0c;憑借其出色的性能和豐富的功能&#xff0c;成為眾多開發者的首選工具。 Tower不僅支持常規的Git操作&#xff0c;如提交、推送和拉取&#xff0c;還提供了許多高級功能…

四、VGA項目:聯合精簡幀+雙fifo+sobel算法 實現VGA顯示

前言&#xff1a;該項目實際上是在很多基礎的小練習上合成起來的&#xff0c;例如涉及到uart&#xff08;rs232&#xff09;的數據傳輸、雙fifo流水線操作、VGA圖像顯示&#xff0c;本次內容在此基礎上又增添了sobel算法&#xff0c;能實現圖像的邊沿監測并VGA顯示。 文章目錄…

簡單的DbUtils工具類【精細】

目錄 單條通用增刪改方法 1.創建maven項目&#xff0c;并加載依賴 2.創建數據庫連接工具類(Dbutils類) 3.創建一個執行器(SqlExecutor類) 4.通用(增&#xff0c;刪&#xff0c;改)方法 1.創建方法 2.創建userInfo實體類 3.創建測試類&#xff0c;測試增&#xff0c;刪&#xf…

探索數據結構:樹與二叉樹

?? 歡迎大家來到貝蒂大講堂?? &#x1f388;&#x1f388;養成好習慣&#xff0c;先贊后看哦~&#x1f388;&#x1f388; 所屬專欄&#xff1a;數據結構與算法 貝蒂的主頁&#xff1a;Betty’s blog 1. 樹 1.1. 樹的定義 樹是一種非線性的數據結構&#xff0c;它是由n&a…

ORA-609頻繁出現在alert.log,如何解決?

ORA-609就alertlog中比較常見的一個報錯&#xff0c;雖然并沒有太大的影響&#xff0c;但是頻繁的出現在alert log也是很讓人厭煩的事情&#xff0c;本文介紹如何排查解決ORA-609問題。 1.ORA-609官方定義 could not attach to incoming connection Cause Oracle process cou…

【SRC實戰】前端脫敏信息泄露

挖個洞先 https://mp.weixin.qq.com/s/xnCQQCAneT21vYH8Q3OCpw “ 以下漏洞均為實驗靶場&#xff0c;如有雷同&#xff0c;純屬巧合 ” 01 — 漏洞證明 一、前端脫敏&#xff0c;請求包泄露明文 “ 前端脫敏處理&#xff0c;請求包是否存在泄露&#xff1f; ” 1、獲取驗…