洛谷 P1967 [NOIP 2013 提高組] 貨車運輸(kruskal 重構樹 + 求路徑最小邊權)

題目鏈接

題目難度

洛谷上是藍題,本人認為評高了,此題思維和實現都不難,應該是綠題。

題目解法概括

kruskal 重構樹 + 倍增優化求路徑最小邊權

代碼

#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;typedef long long LL;const LL Maxn = 1e4 + 5;
const LL Maxm = 5 * 1e4 + 5;
const LL Maxk = 20;
const LL Inf = 1e18;struct node {LL x, y, z;
} Edge[Maxm];struct node2 {LL to, e;
};
vector<node2> tree[Maxn];LL bfa[Maxn], father[Maxn][Maxk], depth[Maxn], minDis[Maxn][Maxk];
bool vis[Maxn];void init_bfa(LL n) {for (LL i = 0; i <= n; ++i)  bfa[i] = i;return;
}LL f_find(LL x) {if (x == bfa[x])  return x;else  return bfa[x] = f_find(bfa[x]);
}bool f_join(LL u, LL v) {u = f_find(u);v = f_find(v);if (u == v)  return false;bfa[u] = v;return true;
}void dfs(LL u, LL fa) {vis[u] = true;father[u][0] = fa;depth[u] = depth[fa] + 1;for (LL i = 1; depth[u] > (1 << i); ++i) {father[u][i] = father[father[u][i - 1]][i - 1];minDis[u][i] = min(minDis[u][i - 1], minDis[father[u][i - 1]][i - 1]);}for (auto elem : tree[u]) {if (elem.to == fa)  continue;minDis[elem.to][0] = elem.e;dfs(elem.to, u);}return;
}LL path_num(LL u, LL v) {if (depth[u] < depth[v])  swap(u, v);LL res = Inf;for (LL i = Maxk - 1; i >= 0; --i) {if (depth[father[u][i]] >= depth[v]) {res = min(res, minDis[u][i]);u = father[u][i];}}if (u == v)  return res;for (LL i = Maxk - 1; i >= 0; --i) {if (father[u][i] != father[v][i]) {res = min(res, min(minDis[u][i], minDis[v][i]));u = father[u][i];v = father[v][i];}}if (father[u][0] == 0)  return -1;else {res = min(res, min(minDis[u][0], minDis[v][0]));return res;}
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);LL n, m, q, a, b;cin >> n >> m;for (LL i = 1; i <= m; ++i) {cin >> Edge[i].x >> Edge[i].y >> Edge[i].z;}sort(Edge + 1, Edge + m + 1, [](const node& a, const node& b) {return a.z > b.z;});init_bfa(n);for (LL i = 1; i <= m; ++i) {if (f_join(Edge[i].x, Edge[i].y) != false) {tree[Edge[i].x].push_back({Edge[i].y, Edge[i].z});tree[Edge[i].y].push_back({Edge[i].x, Edge[i].z});}}for (LL i = 1; i <= n; ++i) {if (vis[i] == false)  dfs(i, 0);}cin >> q;while (q--) {cin >> a >> b;cout << path_num(a, b) << '\n';}return 0;
}

總結

只考慮和結果有關的部分,是此題的突破點,也是重要的思維方式。

解法

若 x 到 y 有多條路徑,只需考慮最小邊權最大的路徑,直接找這樣的路徑,比較費時,可以考慮直接去掉無用的路徑,那么用 kruskal 重構樹構建最大瓶頸樹。我們只考慮和結果有關的部分。

此時,問題就變成了樹上的求路徑的最小邊權問題,需要求 LCA,求 LCA 和求路徑的最小邊權可以同步進行。

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

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

相關文章

【01】針對開源收銀系統icepos (寶塔面板) 詳細安裝教程詳細參考-優雅草卓伊凡

【01】針對開源收銀系統icepos (寶塔面板) 詳細安裝教程詳細參考-優雅草卓伊凡引言本文做參考&#xff0c;下篇文章 直接實踐&#xff0c;由于已經選型本系統是服務端php開發的系統&#xff0c;他的系統環境如下&#xff1a;系統安裝 環境要求ICEPOS對服務器或電腦硬件要求不高…

MySQL的常用命令

目錄1. 連接MySQL數據庫基本連接語法連接參數說明2. 數據庫操作2.1 查看數據庫2.2 創建數據庫2.3 刪除數據庫3. 表操作3.1 查看表信息3.2 創建表3.3 常用數據類型3.4 修改表結構3.5 刪除表4. 數據操作 (CRUD)4.1 插入數據 (CREATE)4.2 查詢數據 (READ)基本查詢條件查詢排序和分…

Linux: config: CONFIG_CHECKPOINT_RESTORE;CRIU

文章目錄 config CHECKPOINT_RESTORE commit related 簡介 參考 如何使用 Checkpoint/Restore 功能 步驟 1:確保內核支持 步驟 2:安裝 CRIU 步驟 3:檢查點(Checkpoint) 步驟 4:恢復(Restore) 步驟 5:驗證 常見應用場景 注意事項 python config CHECKPOINT_RESTORE bo…

eclipse怎么把項目設為web

在 Eclipse 中將一個項目設置為 Web 項目&#xff08;或稱動態 Web 項目&#xff09;主要有兩種場景&#xff1a;?創建新的 Web 項目? 和 ?將現有項目轉換為 Web 項目。我將為你詳細講解這兩種方法。前提條件&#xff1a;確保你有必要的 Eclipse 組件在開始之前&#xff0c;…

CVPR 2025|基于視覺語言模型的零樣本3D視覺定位

論文信息題目&#xff1a;Zero-Shot 3D Visual Grounding from Vision-Language Models基于視覺語言模型的零樣本3D視覺定位作者&#xff1a;Rong Li, Shijie Li, Lingdong Kong, Xulei Yang, Junwei Liang論文創新點提出全新框架&#xff1a;論文提出SeeGround這一無需訓練的零…

Realtime API 語音代理端到端接入全流程教程(含 Demo,延遲 280ms)

在現代應用中&#xff0c;實時語音交互已經成為重要功能&#xff0c;而低延遲的語音傳輸更是用戶體驗的關鍵指標。本文將詳細介紹如何使用 Realtime API 實現 語音代理 的端到端接入&#xff0c;包括環境搭建、接口調用、低延遲優化及 Demo 演示。通過本教程&#xff0c;開發者…

AI賦能辦公:用Python解決發票合并打印難題

一、問題的提出今天網友提問&#xff1a;報銷時&#xff0c;財務要求要把發票合并打印&#xff0c;即兩張合成一張放在A4紙上&#xff0c;中間還要加一道黑色分界線&#xff0c;如何快速完成數十張發票的打印&#xff1f;問題的提出二、問題分析這個問題可以采用兩種方法解決&a…

Shell編程之正則表達式與文本處理工具

一、正則表達式基礎1. 正則表達式概述?定義?&#xff1a;正則表達式&#xff08;Regular Expression&#xff0c;簡稱Regex&#xff09;是由普通字符?&#xff08;如字母、數字、標點符號&#xff09;與元字符?&#xff08;具有特殊含義的專用字符&#xff09;組成的字符串…

使用 Spring AI Alibaba Graph 實現工作流

1 依賴<dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-dashscope</artifactId><version>1.0.0.2</version> </dependency><dependency><groupId>com.alibaba.cloud.…

碰一碰系統源碼于小程序打通技術開發整合方案,驅動AI技術開發源代碼

碰一碰系統結合小程序開發數據互通&#xff0c;驅動AI技術開發源代碼碰一碰系統作為門店獲客技術落地的核心載體&#xff0c;已從標準化產品向實體店定制演進。本文從源碼d的形式出發&#xff0c;解析企業級數字人分身系統的交互系統&#xff0c;為技術團隊提供可落地的開發指南…

深度學習——自然語言處理NLP

自然語言處理中的詞向量技術演進與實踐一、傳統統計語言模型的困境與突破1.1 統計語言模型的局限性早期NLP主要依賴統計語言模型&#xff0c;如n-gram模型&#xff0c;通過統計詞序列的頻率來預測語言概率。這類模型存在兩個根本缺陷&#xff1a;早期統計語言模型的局限性1. 維…

uni-app頭像疊加顯示

展示代碼<view class"bmBox"><view class"bmLeft">已報名&#xff1a;<text class"blueColor">10人</text></view><view class"bmRight dflex"><view class"avatarList"><ima…

私有化部署Ragflow的預訓練模型

部署ragflow代碼庫中的det.onnx模型&#xff08;通常是目標檢測或文檔結構解析類模型&#xff0c;如版面分析模型&#xff09;到火山云&#xff0c;需基于ONNX Runtime推理框架&#xff0c;結合火山云的計算資源和服務能力實現。以下是具體步驟&#xff1a; 一、模型特性與依賴…

go中的singleflight是如何實現的?

大家周四快樂&#xff0c;今天分享粉絲投稿的面經。 內容整理如下&#xff1a;go go singleflight 的底層實現 singleflight 是 Go 語言標準庫中的一個很有用的包&#xff0c;它主要用來處理并發請求時的重復問題。比如在高并發場景下&#xff0c;如果多個請求同時訪問同一個資…

【開關電源篇】整流及其濾波電路的工作原理和設計指南-超簡單解讀

開關電源之整流電路1. 什么是半波整流電路&#xff1f;1.1 電路結構與工作原理1.2 輸出特性分析2. 全波整流電路如何工作&#xff1f;2.1 電路結構特點2.2 工作過程分析2.3 優缺點對比3. 橋式整流電路有什么優勢&#xff1f;3.1 電路組成3.2 工作原理詳解3.3 性能特點4. 什么是…

創建GLFW窗口,開啟OpenGL之路

前言&#xff1a;本系列文章主要是一個學習筆記和總結&#xff0c;具體學習過程參考https://learnopengl-cn.github.io/這個網站的是學習OpenGL的一個很完美的新手教程。在這個部分系列中&#xff0c;我會以自己的理解詳細描述每個函數、方法的使用&#xff0c;以及關鍵參數的解…

es通過分片遷移遷移解決磁盤不均勻問題

POST _cluster/reroute {"commands": [{"move": {"index": "xxx_detail","shard": 2,"from_node": "el8P9Ul","to_node": "4sDv-RD"}}] }查看遷移進程 GET _cat/shards?v查看磁盤…

c++打包pyd文件給Python使用調用函數

c打包pyd文件給Python使用調用函數C語言源碼&#xff1a;simplemath.cpp代碼&#xff1a;// // Created by ASFOR on 2025/9/11. // #include <pybind11/pybind11.h>namespace py pybind11;// 一個簡單的加法函數 int add(int a, int b) {return a b; }// 一個簡單的乘…

hadoop的api操作對象存儲

一、獲取文件或目錄1. 獲取某個目錄下的文件// 必須的依賴 import org.apache.hadoop.conf.Configuration import org.apache.hadoop.fs.{FileSystem, LocatedFileStatus, Path, RemoteIterator}// 獲取某個目錄下的文件路徑 def list_file(conf: Configuration, dir_path: Str…

《UE5_C++多人TPS完整教程》學習筆記52 ——《P53 FABRIK 算法(FABRIK IK)》

本文為B站系列教學視頻 《UE5_C多人TPS完整教程》 —— 《P53 FABRIK 算法&#xff08;FABRIK IK&#xff09; 的學習筆記&#xff0c;該系列教學視頻為計算機工程師、程序員、游戲開發者、作家&#xff08;Engineer, Programmer, Game Developer, Author&#xff09; Stephen …