經典算法 最小生成樹(prim算法)

最小生成樹

題目描述

給定一個 n 個點 m 條邊的無向圖,圖中可能存在重邊和自環,邊權可能為負數。

求最小生成樹的樹邊權重之和。如果最小生成樹不存在,則輸出 impossible

給定一張邊帶權的無向圖 G = (V, E),其中:

  • V 表示圖中點的集合,n = |V|
  • E 表示圖中邊的集合,m = |E|

由 V 中的全部 n 個頂點和 E 中 n - 1 條邊構成的無向連通子圖被稱為 G 的一棵生成樹,其中邊的權值之和最小的生成樹被稱為無向圖 G 的最小生成樹。


輸入格式

  • 第一行包含兩個整數 nm
  • 接下來 m 行,每行包含三個整數 u, v, w,表示點 u 和點 v 之間存在一條權值為 w 的邊。

輸出格式

  • 共一行:
    • 若存在最小生成樹,則輸出一個整數,表示最小生成樹的樹邊權重之和。
    • 如果最小生成樹不存在,則輸出 -1

c++代碼

#include<bits/stdc++.h>using namespace std;struct edge{int a, b, val;
};struct mycmp{bool operator()(const edge& a, const edge& b) { return a.val > b.val; }
};int main() {int n, m, a, b, c;edge e;cin >> n >> m;vector<vector<edge>> edges(n + 1);for (int i = 0; i < m; i++) {cin >> a >> b >> c;e.a = a, e.b = b, e.val = c, edges[a].push_back(e);e.b = a, e.a = b, edges[b].push_back(e);}priority_queue<edge, vector<edge>, mycmp> q;vector<bool> vis(n + 1, false);vector<edge> ans;int start = 1;for (int i = 0; i < n - 1; i++) {vis[start] = true;for (edge x : edges[start]) if (!vis[x.b]) q.push(x);while(!q.empty() && vis[q.top().b]) q.pop();if (q.empty()) {cout << -1;return 0;}e = q.top(), ans.push_back(e), q.pop(), start = e.b;}int sum = 0;for (edge x : ans) sum += x.val;cout << sum;return 0;
}

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

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

相關文章

LeetCode算法題 (設計鏈表)Day16!!!C/C++

https://leetcode.cn/problems/design-linked-list/description/ 一、題目分析 你可以選擇使用單鏈表或者雙鏈表&#xff0c;設計并實現自己的鏈表。 單鏈表中的節點應該具備兩個屬性&#xff1a;val 和 next 。val 是當前節點的值&#xff0c;next 是指向下一個節點的指針/引…

《解鎖GCC版本升級:開啟編程新世界大門》

《解鎖GCC版本升級:開啟編程新世界大門》 一、引言:GCC 版本升級的魔法鑰匙 在編程的廣闊天地里,GCC(GNU Compiler Collection)宛如一座燈塔,為無數開發者照亮前行的道路。它是一款開源且功能強大的編譯器集合,支持 C、C++、Objective - C、Fortran、Ada 等多種編程語言…

toLua筆記

基本 LuaState luaStatenew LuaState(); luaState.Start(); luaState.DoString("xxx"); luaState.DoFile("yyy.lua"); luaState.Require("zzz");//不要加.lua后綴 luaState.CheckTop();//檢查解析器棧頂為空 luaState.Dispose(); luaStatenull;…

go實現雙向鏈表

需求 實現雙向鏈表的節點生成、正反向遍歷、指定刪除。 實現 package mainimport ("fmt" )type zodiac_sign struct {number intdizhi stringanimal stringyear intprevious *zodiac_signnext *zodiac_sign }// 添加 // func add_node_by_order(pr…

AI實踐指南:AGENT、RAG和MCP在Java中的簡單實現

在當今AI快速發展的時代&#xff0c;有幾個核心概念正在改變我們構建智能應用的方式。本文將用簡單易懂的語言介紹三個重要概念&#xff1a;AGENT&#xff08;AI代理&#xff09;、RAG&#xff08;檢索增強生成&#xff09;和MCP&#xff08;多通道感知&#xff09;&#xff0c…

解決VMware虛擬機能搜索到網頁但打不開的問題

&#x1f334; 問題描述 很奇怪&#xff0c;不知道為什么&#xff0c;我安裝的Windows 10虛擬機能在瀏覽器中搜索到網頁&#xff0c;但點擊具體的網頁鏈接就是死活不能加載出來&#xff0c;如下圖所示&#xff1a; 點擊第一個鏈接&#xff0c;加載了四五分鐘&#xff0c;結果就…

JVM性能調優的基礎知識 | JVM內部優化與運行時優化

目錄 JVM內部的優化邏輯 JVM的執行引擎 解釋執行器 即時編譯器 JVM采用哪種方式&#xff1f; 即時編譯器類型 JVM的分層編譯5大級別&#xff1a; 分層編譯級別&#xff1a; 熱點代碼&#xff1a; 如何找到熱點代碼&#xff1f; java兩大計數器&#xff1a; OSR 編譯…

什么是多租戶系統

隨著云計算和 SaaS&#xff08;Software as a Service&#xff09;模式的普及&#xff0c;多租戶架構&#xff08;Multi-Tenant Architecture&#xff09;成為 SaaS 產品設計中的核心模式之一。多租戶架構允許多個用戶&#xff08;租戶&#xff09;共享同一套基礎設施和應用&am…

多線程系列三:這就是線程的狀態?

1.認識線程的狀態 NEW&#xff1a;Thread對象已經創建好了&#xff0c;但還沒有調用start方法在系統中創建線程 RUNNABLE&#xff1a;就緒狀態&#xff0c;表示這個線程正在CPU上執行&#xff0c;或準備就緒&#xff0c;隨時可以去CPU上執行 BLOCKED&#xff1a;表示由于鎖競爭…

【C語言練習】019. 使用結構體數組存儲復雜數據

019. 使用結構體數組存儲復雜數據 019. 使用結構體數組存儲復雜數據示例1&#xff1a;定義一個結構體并創建結構體數組定義結構體創建并初始化結構體數組輸出結果 示例2&#xff1a;動態輸入數據到結構體數組定義結構體動態輸入數據示例輸入和輸出 示例3&#xff1a;使用結構體…

**Java面試大冒險:謝飛機的幽默與技術碰撞記**

互聯網大廠Java求職者面試&#xff1a;一場嚴肅與搞笑交織的技術盛宴 場景&#xff1a; 互聯網大廠面試間 人物&#xff1a; 面試官&#xff1a; 一位嚴肅的資深架構師&#xff0c;對技術要求嚴格。謝飛機&#xff1a; 一位搞笑的程序員&#xff0c;技術實力參差不齊。 第一…

MySQL進階(三)

五、鎖 1. 概述 鎖是計算機協調多個進程或線程并發訪問某一資源的機制&#xff08;避免爭搶&#xff09;。 在數據庫中&#xff0c;除傳統的計算資源&#xff08;如 CPU、RAM、I/O 等&#xff09;的爭用以外&#xff0c;數據也是一種供許多用戶共享的資源。如何保證數據并發…

【BLE】【nRF Connect】 精講nRF Connect自動化測試套件(宏錄制、XML腳本)

目錄 前言 1. nRF Connect自動化測試介紹 1.1. nRF connect宏錄制功能介紹 1.2. 電腦端XML方式 1.3 實際應用案例 1.3.1 BLE 穩定性測試 1.3.2 設備固件更新(DFU)測試 1.3.3 批量設備配置 1.4 操作步驟 1.5 注意事項 2. nRF Connect日志記錄 2.1. 日志記錄功能 …

【數據結構】堆的完整實現

堆的完整實現 堆的完整實現GitHub地址前言堆的核心功能實現重溫堆的定義堆結構定義1. 堆初始化與銷毀2. 元素交換函數3. 堆化操作向上調整&#xff08;子→父&#xff09;向下調整&#xff08;父→子&#xff09; 4. 堆元素插入5. 堆元素刪除6. 輔助功能函數堆的判空獲取堆頂元…

如何優化MySQL主從復制的性能?

優化MySQL主從復制的性能需要從硬件、配置、架構設計和運維策略等多方面入手。以下是詳細的優化方案&#xff1a; 一、減少主庫寫入壓力 1. ?主庫優化? 二進制日志&#xff08;binlog&#xff09;優化?&#xff1a; 使用 binlog_formatROW 以獲得更高效的復制和更少的數…

MySQL安裝完全指南:從零開始到配置優化(附避坑指南)

&#x1f525; 前言&#xff1a;為什么你總是裝不好MySQL&#xff1f; &#xff08;實話實說&#xff09;每次看到新手在MySQL安裝環節瘋狂踩坑&#xff0c;老司機都忍不住想摔鍵盤&#xff01;明明官網下載的安裝包&#xff0c;怎么就會報錯呢&#xff1f;為什么別人的環境變…

密碼學_加密

目錄 密碼學 01 密碼基礎進制與計量 02 加解密基操 替換 移位 編碼 編碼 置換 移位 加解密強度 03 對稱加密算法(私鑰) 工作過程 缺陷 對稱加密算法列舉&#xff1f; DES DES算法架構 DES分組加密公式 DES中ECB-CBC兩種加密方式 3DES 由于DES密鑰太短&#xf…

輕量級RTSP服務模塊:跨平臺低延遲嵌入即用的流媒體引擎

在音視頻流媒體系統中&#xff0c;RTSP&#xff08;Real-Time Streaming Protocol&#xff09;服務模塊通常扮演著“視頻分發中心”的角色&#xff0c;它將編碼后的音視頻內容轉為標準的流媒體格式&#xff0c;供客戶端&#xff08;播放器、云端平臺、AI模塊等&#xff09;拉流…

Nginx發布Vue(ElementPlus),與.NETCore對接(騰訊云)

案例資料鏈接&#xff1a;https://download.csdn.net/download/ly1h1/90745660 1.邏輯說明 1.1 邏輯示意圖 # 前端請求處理邏輯圖瀏覽器請求流程: 1. 瀏覽器發起請求├─ 開發環境(DEV)│ ├─ 請求URL: http://192.168.0.102:3000/api/xxx│ └─ 被Vite代理處理└─ 生產…

解析機器人 2.0.2 | 支持超過50種短視頻平臺的鏈接解析,無水印提取,多功能下載工具

解析機器人是一款功能強大的工具軟件&#xff0c;登錄即可解鎖會員特權。它支持超過50種短視頻平臺的鏈接解析&#xff0c;包括抖音、快手、西瓜、bilibili等&#xff0c;并能實現無水印提取。此外&#xff0c;還提供P2P下載、磁力鏈等多種下載方式&#xff0c;確保用戶能夠快速…