洛谷 P2052 [NOI2011] 道路修建-普及/提高-

P2052 [NOI2011] 道路修建

題目描述

在 W 星球上有 nnn 個國家。為了各自國家的經濟發展,他們決定在各個國家之間建設雙向道路使得國家之間連通。但是每個國家的國王都很吝嗇,他們只愿意修建恰好 n?1n - 1n?1 條雙向道路。

每條道路的修建都要付出一定的費用,這個費用等于道路長度乘以道路兩端 的國家個數之差的絕對值。例如,在下圖中,虛線所示道路兩端分別有 222 個、444 個國家,如果該道路長度為 111,則費用為 1×∣2?4∣=21×|2 - 4|=21×∣2?4∣=2。圖中圓圈里的數字表示國家的編號。

由于國家的數量十分龐大,道路的建造方案有很多種,同時每種方案的修建費用難以用人工計算,國王們決定找人設計一個軟件,對于給定的建造方案,計算出所需要的費用。請你幫助國王們設計一個這樣的軟件。

輸入格式

輸入的第一行包含一個整數 nnn,表示 W 星球上的國家的數量,國家從 111nnn 編號。

接下來 n?1n - 1n?1 行描述道路建設情況,其中第 iii 行包含三個整數 aia_iai?bib_ibi?cic_ici?,表示第 iii 條雙向道路修建在 aia_iai?bib_ibi? 兩個國家之間,長度為 cic_ici?

輸出格式

輸出一個整數,表示修建所有道路所需要的總費用。

輸入輸出樣例 #1

輸入 #1

6
1 2 1
1 3 1
1 4 2
6 3 1
5 2 1

輸出 #1

20

說明/提示

對于 100%100\%100% 的數據,1≤ai,bi≤n1\leq a_i, b_i\leq n1ai?,bi?n0≤ci≤1060\leq c_i\leq10^60ci?1062≤n≤1062\leq n\leq 10^62n106

測試點編號n=n=n=
111222
222101010
333100100100
444200200200
555500500500
666600600600
777800800800
888100010001000
99910410^4104
1010102×1042\times 10^42×104
1111115×1045\times 10^45×104
1212126×1046\times 10^46×104
1313138×1048\times 10^48×104
14141410510^5105
1515156×1056\times 10^56×105
1616167×1057\times 10^57×105
1717178×1058\times 10^58×105
1818189×1059\times 10^59×105
19,2019,2019,2010610^6106

solution

任以一個節點為根節點,dfs 統計每一個子樹 u 的 size 對于每條邊 e 的長度為 w, 則該邊的費用為 w * abs(n - 2 * size), 對所有邊費用求和即可

代碼

#include<iostream>
#include<algorithm>
#include "cstring"
#include "vector"using namespace std;/** P2052 [NOI2011] 道路修建* 題目大意: 一個有權無向連通圖,要得到一顆樹,使得費用最小,費用為樹的邊費用之和,邊的費用為邊的長度乘以邊兩端的節點數量之差。** 思路:*      任以一個節點為根節點,dfs 統計每一個子樹 u 的 size 對于每條邊 e 的長度為 l*      則該邊的費用為 l * abs(n - 2 * size), 求和即可**/typedef long long ll;
typedef pair<int, int> pii;
const int N = 1e6 + 5;int n;
ll ans;
vector<pii> e[N];int dfs(int u, int p) {int siz = 1;for (auto [v, w]: e[u]) {if (v == p) continue;int siz_v = dfs(v, u);ans += 1ll * abs(n - 2 * siz_v) * w;siz += siz_v;}return siz;
}int main() {cin >> n;for (int i = 1, x, y, w; i < n; i++) {scanf("%d%d%d", &x, &y, &w);e[x].emplace_back(y, w);e[y].emplace_back(x, w);}dfs(1, 0);cout << ans << endl;return 0;
}

結果

在這里插入圖片描述

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

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

相關文章

springboot連接不上redis,但是redis客戶端是能連接上的

除了常規排查&#xff0c;還有一個就是檢查配置文件格式。這個舊版本格式會導致讀取不到配置&#xff0c;spring:# 對應 RedisProperties 類redis:host: 127.0.0.1port: 6379 # password: 123456 # Redis 服務器密碼&#xff0c;默認為空。生產中&#xff0c;一定要設置 Red…

GitBook 完整使用指南:從安裝到部署

文章目錄 環境準備 Node.js 安裝 GitBook CLI 安裝 項目初始化 創建項目結構 (可選) npm 初始化 目錄結構配置 開發與調試 本地服務啟動 構建靜態文件 配置文件詳解 插件系統 常用插件推薦 插件安裝與配置 自定義樣式 部署指南 GitHub Pages 部署 Netlify 部署 高級功能 多語言…

VS安裝 .NETFramework,Version=v4.6.x

一、前言 在使用VS2019打開項目時提示MSB3644 找不到 .NETFramework,Versionv4.6.2 的引用程序集的錯誤 二、解決方案 1.百度......找到了解決方法了 2.打開Visual Studio Install 3.點擊修改 4.點擊單個組件&#xff0c;安裝相對應的版本即可

Visual Studio Code中launch.json的解析筆記

<摘要> launch.json 是 Visual Studio Code 中用于配置調試任務的核心文件。本文解析了其最常用的配置字段&#xff0c;涵蓋了基本調試設置、程序控制、環境配置和高級調試功能。理解這些字段能幫助開發者高效配置調試環境&#xff0c;提升開發效率。<解析> 1. 背景…

試試 Xget 加速 GitHub 克隆倉庫

引言 在全球化軟件開發環境中&#xff0c;開發者經常面臨跨地域訪問GitHub等平臺的網絡挑戰&#xff1a;下載速度緩慢、連接不穩定、甚至完全無法訪問。這些問題嚴重影響了開發效率和協作體驗。Xget作為一個開源的高性能資源獲取加速引擎&#xff0c;通過智能路由、多節點分發…

優雅處理Go中的SIGTERM信

在Go語言中優雅處理SIGTERM信號需通過os/signal包實現&#xff0c;核心流程包括信號注冊、異步監聽和資源清理。SIGTERM 是一種常見的進程終止信號&#xff0c;它允許程序在退出前執行必要的清理操作。與之不同&#xff0c;SIGKILL 信號無法被進程捕獲或忽略。未處理的 SIGTERM…

《R for Data Science (2e)》免費中文翻譯 (第6章) --- scripts and projects

寫在前面 本系列推文為《R for Data Science (2)》的中文翻譯版本。所有內容都通過開源免費的方式上傳至Github&#xff0c;歡迎大家參與貢獻&#xff0c;詳細信息見&#xff1a; Books-zh-cn 項目介紹&#xff1a; Books-zh-cn&#xff1a;開源免費的中文書籍社區 r4ds-zh-cn …

GitHub Spark深度體驗:是革命前夜,還是又一個“大廠玩具”?

最近&#xff0c;AI 編碼工具層出不窮&#xff0c;幾乎每天都有新概念誕生。而當 GitHub 這樣的行業巨頭攜“Vibe Coding”概念入場時&#xff0c;所有開發者的期待值都被瞬間拉滿。GitHub Spark&#xff0c;一個承諾能用自然語言將你的想法直接變成全棧應用的工具&#xff0c;…

科學研究系統性思維的方法體系:研究設計相關模版

一、研究設計方案模板 模板說明本模板基于《研究設計原理與方法》深度解讀報告的理論框架&#xff0c;幫助研究者制定系統性的研究設計方案。模板整合了因果推斷理論、效度控制框架和現代實驗設計原理。1. 研究問題界定與假設陳述 1.1 研究問題核心要素 研究問題&#xff08;明…

法律審查prompt收集

當前DeepSeek等大模型已經具備初步合同審查能力。 這里收集合同審查及相關prompt&#xff0c;不管是做Coze等Agent&#xff0c;還是開發LLM應用&#xff0c;都有可能用到這些prompt。 https://github.com/LeeXYZABC/law_propmpts.git 1 條款分析 system_prompt&#xff0c;L…

貪心算法解決活動選擇問題:最多不重疊活動數量求解

題目描述問題背景活動選擇問題是貪心算法的經典應用場景之一。假設有若干個活動&#xff0c;每個活動都有獨立的開始時間和結束時間&#xff0c;且同一時間只能進行一個活動。要求從這些活動中選擇出最大數量的不重疊活動&#xff0c;即任意兩個選中的活動&#xff0c;前一個活…

2025年如何批量下載雪球帖子和文章導出pdf?

之前分享過雪球文章下載 2025 批量下載市場高標解讀/配置喵/wangdizhe 雪球帖子/文章導出excel和pdf 這里以市場高標解讀這個號為例 抓取下載的所有帖子excel數據包含文章日期&#xff0c;文章標題&#xff0c;文章鏈接&#xff0c;文章簡介&#xff0c;點贊數&#xff0c;轉…

【C++】紅黑樹(詳解)

文章目錄上文鏈接一、什么是紅黑樹二、紅黑樹的性質1. 顏色規則2. 紅黑樹的規則為什么可以控制平衡3. 紅黑樹的效率三、紅黑樹的整體結構四、紅黑樹的插入1. 空樹的插入2. 插入節點的父親為黑色3. 插入節點的父親為紅色(1) 叔叔為紅色&#xff1a;變色(2) 叔叔為空或為黑色&…

AI提升SEO關鍵詞效果新策略

內容概要 在2025年&#xff0c;人工智能&#xff08;AI&#xff09;技術正全面革新搜索引擎優化&#xff08;SEO&#xff09;的關鍵詞優化模式。通過智能分析用戶搜索意圖與語義關聯&#xff0c;AI能夠精準匹配關鍵詞并進行高效布局。本文將深入探討AI驅動的關鍵詞策略升級方案…

手動安裝的node到nvm吧版本管理的過程。

前言 本文記錄個人在使用nvm包管理器安裝node 14版本 npm安裝失敗&#xff0c;進行手動安裝的node到nvm吧版本管理的過程。 安裝node 14 時 npm總是安裝失敗&#xff0c;如下圖 通過手動下載對于版本 node下載地址 下載解壓點擊所需的版本下載后解壓 修改解壓后的文件夾名稱…

Python爬蟲實戰:構建Widgets 小組件數據采集和分析系統

1. 引言 1.1 研究背景 在當今數字化時代,Widgets 作為用戶界面的基本組成元素,廣泛應用于移動應用、網站和桌面軟件中,其設計質量直接影響用戶體驗。隨著市場競爭的加劇,了解市場上各類 Widgets 產品的特征、價格區間、用戶評價等信息,對于產品設計和商業決策具有重要價…

1.1 Internet簡介

1.網絡, 計算機網絡, 互聯網 2.不同的角度認識Internet1.網絡, 計算機網絡, 互聯網 網絡表示連接兩點以上的通路系統比如:a.你家到鄰居家的小路 -> 一個小網絡b.一個村子的所有道路 -> 一個更大的網絡c.送外賣的小哥騎車走的路線 -> 一個配送網絡計算機網絡表示專門傳…

pytest使用allure測試報告

&#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 選用的項目為Selenium自動化測試Pytest框架實戰&#xff0c;在這個項目的基礎上說allure報告。 allure安裝 首先安裝python的allure-pytest包 pip install allu…

PortSwigger靶場之SQL injection with filter bypass via XML encoding通關秘籍

一、題目分析該實驗室的庫存查詢功能存在 SQL 注入漏洞。查詢結果為這些信息會出現在應用程序的響應中&#xff0c;因此您可以利用“聯合”攻擊來從其他表中獲取數據。該數據庫中有一個“用戶”表&#xff0c;該表包含了已注冊用戶的用戶名和密碼。要解決&#xff0c;需進行一次…

Cocos游戲中自定義按鈕組件(BtnEventComponent)的詳細分析與實現

概述在Cocos游戲開發中&#xff0c;按鈕交互是用戶界面中最基礎且重要的組成部分。原生的Cocos Button組件雖然功能完善&#xff0c;但在復雜的游戲場景中往往無法滿足多樣化的交互需求。本文將詳細分析一個功能強大的按鈕組件BtnEventComponent&#xff0c;它提供了多種交互模…