洛谷 P2680 [NOIP 2015 提高組] 運輸計劃(二分答案 + 樹上差分)

題目鏈接

題目概括與評價

很經典,突破口藏的很深,求最小值這里,是問題切入點,想到用二分答案,然后思考怎么寫 f_check 函數。
二分答案+樹上差分。

代碼

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;typedef long long LL;const LL Maxn = 300000 + 5;
const LL Maxm = 300000 + 5;
const LL Maxk = 20;struct node {LL to, e;
};
vector<node> tree[Maxn];struct node3 {LL x, y, e, lca;
} path[Maxm];LL father[Maxn][Maxk], depth[Maxn], rDis[Maxn], faW[Maxn], dfn[Maxn], v_diff[Maxn], maxVal = 0, T = 0;void init(LL u, LL fa) {dfn[++T] = u;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];}for (auto elem : tree[u]) {if (elem.to == fa)  continue;rDis[elem.to] = rDis[u] + elem.e;faW[elem.to] = elem.e;init(elem.to, u);}return;
}LL LCA(LL u, LL v) {if (depth[u] < depth[v])  swap(u, v);for (LL i = Maxk - 1; i >= 0; --i) {if (depth[father[u][i]] >= depth[v])  u = father[u][i];}if (u == v)  return u;for (LL i = Maxk - 1; i >= 0; --i) {if (father[u][i] != father[v][i]) {u = father[u][i];v = father[v][i];}}return father[u][0];
}bool f_check(LL mid, LL n, LL m) {if (mid >= maxVal)  return true;for (LL i = 0; i <= n; ++i)  v_diff[i] = 0;LL cnt = 0;for (LL i = 1; i <= m; ++i) {if (path[i].e <= mid)  continue;++v_diff[path[i].x];++v_diff[path[i].y];v_diff[path[i].lca] -= 2;++cnt;}for (LL i = T; i >= 1; --i) {v_diff[father[dfn[i]][0]] += v_diff[dfn[i]];}for (LL i = 1; i <= n; ++i) {if (v_diff[i] >= cnt && maxVal - faW[i] <= mid)  return true;}return false;
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);LL n, m, a, b, t;cin >> n >> m;for (LL i = 1; i < n; ++i) {cin >> a >> b >> t;tree[a].push_back({b, t});tree[b].push_back({a, t});}init(1, 0);for (LL i = 1; i <= m; ++i) {cin >> path[i].x >> path[i].y;path[i].lca = LCA(path[i].x, path[i].y);path[i].e = rDis[path[i].x] + rDis[path[i].y] - 2 * rDis[path[i].lca];maxVal = max(maxVal, path[i].e);}LL L = 0, mid = 0, R = maxVal;while (L < R) {mid = L + ((R - L) >> 1);if (f_check(mid, n, m) != false)  R = mid;else  L = mid + 1;}cout << L;return 0;
}

總結

每次思考要求什么,確定要求什么后,用算法實現,遇到卡時間或空間,就換個角度思考,或者通過某些算法或數據結構優化暴力。如此逐步求出問題的解。

思路

是樹上問題,本質是求所有路徑里的最長路徑的最小值,可以進行的操作是將某條邊的邊權設為0。
求最大值的最小值,可用二分答案。
思考怎么寫判定函數,
判定目標:最長路徑的長度是否可能<= mid
判定方法:
  • 路徑長度 <= mid 的路徑不用考慮,考慮路徑長度 > mid 的路徑。這些所有要考慮的路徑,要盡量通過讓某條邊的邊權為0,而全部變成路徑長度 <= mid 的路徑。
  • 選擇邊的基本思想是貪心。首先這條邊必須滿足所有路徑長度 > mid 的路徑都經過該邊,如果這條邊不符合這個條件,必然會導致一些路徑的長度依然 > mid,在符合這個條件的邊里,看有沒有 max_val - x <= mid 的邊(x 是邊權,max_val 是最長路徑的長度),有則說明所有路徑長度 > mid 的路徑減去這條邊權后,路徑長度都會 <= mid,此時返回 true,否則返回 false(我們用了最貪心的策略,依然是之前路徑長度為 max_val 的路徑的長度 > mid,說明最長路徑長度不可能 <= mid)。

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

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

相關文章

接力鄧承浩,姜海榮能講好深藍汽車新故事嗎?

出品 | 何璽排版 | 葉媛深藍汽車迎來新話事人。9月5日&#xff0c;新央企長安汽車旗下品牌深藍汽車傳出新的人事調整。多家業內媒體報道稱&#xff0c;榮耀前中國區CMO姜海榮已正式加入長安汽車&#xff0c;并出任旗下深藍汽車CEO一職。原CEO鄧承浩則升任深藍汽車董事長&#x…

esp32-c3寫一個收集附近 WiFi 和藍牙信號通過

下面給你一個基于 ESP-IDF(v5.x) 的完整示例&#xff1a;在 ESP32-C3 上同時掃描附近 Wi-Fi 與藍牙&#xff08;BLE&#xff09;廣播&#xff0c;把結果以 JSON 結構統一輸出到串口&#xff0c;并且可可選通過 MQTT 上報到服務器&#xff08;打開一個宏即可&#xff09;。日志默…

文心大模型 X1.1:百度交出的“新深度思考”答卷

文心大模型 X1.1&#xff1a;百度交出的“新深度思考”答卷 2025年9月9日&#xff0c;WAVE SUMMIT 2025深度學習開發者大會在北京正式召開&#xff0c;由深度學習技術及應用國家工程研究中心主辦&#xff0c;百度飛槳與文心大模型聯合承辦。大會上&#xff0c;百度正式發布了基…

開始 ComfyUI 的 AI 繪圖之旅-Flux.1圖生圖(八)

文章標題一、Flux Kontext Dev1.關于 FLUX.1 Kontext Dev1.1 版本說明1.2 工作流說明1.3 模型下載2.Flux.1 Kontext Dev 工作流2.1 工作流及輸入圖片下載2.2 按步驟完成工作流的運行3.Flux Kontext 提示詞技巧3.1 基礎修改3.2 風格轉換3.3 角色一致性3.4 文本編輯4.常見問題解決…

Java 生成微信小程序二維碼

1. java 二維碼生成工具類import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import com.pdatao.api.controller.file.FileController; import com.pdatao.api.error.CommunityException; import org.apache.commons.io.IOUtils; import org.springframe…

智慧健康觸手可及:AI健康小屋——未來健康管理的全能守護者

AI健康小屋&#xff0c;這座融合人工智能、物聯網與醫療科技的“健康堡壘”&#xff0c;正悄然重構健康管理生態。它以科技為引擎&#xff0c;將專業醫療資源下沉至社區、企業、家庭&#xff0c;通過智能檢測、精準分析、個性化干預&#xff0c;實現從疾病治療到主動預防的健康…

[工作表控件19] 驗證規則實戰:如何用正則表達式規范業務輸入?

在企業應用中,數據準確性至關重要。工作表控件通過“驗證規則”能力,支持在文本字段和附件字段中使用正則表達式(RegEx)進行格式校驗。它能幫助開發者輕松實現郵箱、身份證號、車牌號、URL 等格式的高效驗證,大幅提升數據質量與表單使用體驗。 一、官方功能介紹與基礎能力…

uniapp分包實現

關于分包優化的說明 在對應平臺的配置下添加"optimization":{"subPackages":true}開啟分包優化 目前只支持mp-weixin、mp-qq、mp-baidu、mp-toutiao、mp-kuaishou的分包優化 分包優化具體邏輯&#xff1a; 靜態文件&#xff1a;分包下支持 static 等靜態…

ctfshow_web14------(PHP+switch case 穿透+SQL注入+文件讀取)

題目&#xff1a;解釋&#xff1a;$c intval($_GET[c]); //獲取整數值 6sleep($c);//延遲執行當前腳本若干秒。提示一下哈沒有break會接著執行下面的但是像是44444&#xff0c;555555,sleep的時間太久我們用3進入here_1s_your_f1ag.php是一個查詢頁面&#xff0c;sql注入查看源…

linux x86_64中打包qt

下載安裝 地址: Releases linuxdeploy/linuxdeploy mv linuxdeploy-x86_64.AppImage linuxdeployqtchmod 777 linuxdeployqtsudo mv linuxdeployqt /usr/local/bin/linuxdeployqt --version報錯 Applmage默認依賴FUSE&#xff0c;需要掛載自身為虛擬文件系統才能運行, ubuntu…

華為昇騰CANN開發實戰:算子自定義與模型壓縮技術指南

點擊 “AladdinEdu&#xff0c;同學們用得起的【H卡】算力平臺”&#xff0c;注冊即送-H卡級別算力&#xff0c;80G大顯存&#xff0c;按量計費&#xff0c;靈活彈性&#xff0c;頂級配置&#xff0c;學生更享專屬優惠。 摘要 隨著人工智能技術的飛速發展&#xff0c;越來越多…

Vue3源碼reactivity響應式篇之reactive響應式對象的track與trigger

概覽 在BaseReactiveHandler類的get方法中&#xff0c;有如下代碼塊if (!isReadonly2){track(target, "get", key);}&#xff0c;這表示通過reactive、shallowReactive創建的響應式對象&#xff0c;非只讀的&#xff0c;當讀取代理對象proxyTarget的某個屬性key時&am…

VRRP 多節點工作原理

VRRP 多節點工作原理 基本概念 VRRP 的設計初衷是給一組節點提供一個 虛擬路由器&#xff0c;對外只表現出一個 VIP。協議規定&#xff1a;同一個 VRRP 實例 下始終只有 一個 Master 持有 VIP&#xff0c;其它全部是 Backup。 Master → 持有 VIP&#xff0c;負責轉發流量到Mas…

Gradio全解11——Streaming:流式傳輸的視頻應用(9)——使用FastRTC+Gemini創建沉浸式音頻+視頻的藝術評論家

Gradio全解11——Streaming&#xff1a;流式傳輸的視頻應用&#xff08;9&#xff09;——使用FastRTCGemini創建沉浸式音頻視頻的藝術評論家11.9 使用FastRTCGemini創建實時沉浸式音頻視頻的藝術評論家11.9.1 準備工作及音頻圖像編碼器1. 項目說明及準備工作2. 音頻和圖像編碼…

Django入門筆記

Python知識點&#xff1a;函數、面向對象。前端開發&#xff1a;HTML、CSS、JavaScript、jQuery、BootStrap。MySQL數據庫。Python的Web框架&#xff1a;Flask&#xff0c;自身短小精悍 第三方組件。Django&#xff0c;內部已集成了很多組件 第三方組件。【主要】1.安裝djang…

當Claude Code失靈,Qwen Code能否成為你的救星?

當Claude Code失靈&#xff0c;Qwen Code能否成為你的救星&#xff1f; 一、開頭&#xff1a;點明困境&#xff0c;引出主角 作為一個大模型博主&#xff0c;日常工作中我經常會使用各種 AI 工具來提高效率&#xff0c;Claude Code 就是我之前非常依賴的一款代碼生成助手 。它…

Go語言快速入門教程(JAVA轉go)——1 概述

優勢 第一個理由&#xff1a;對初學者足夠友善&#xff0c;能夠快速上手。 業界都公認&#xff1a;Go 是一種非常簡單的語言。Go 的設計者們在發布 Go 1.0 版本和兼容性規范后&#xff0c;似乎就把主要精力放在精心打磨 Go 的實現、改進語言周邊工具鏈&#xff0c;還有提升 Go …

【Rust多進程】征服CPU的藝術:Rust多進程實戰指南

?? 歡迎大家來到景天科技苑?? &#x1f388;&#x1f388; 養成好習慣&#xff0c;先贊后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者簡介&#xff1a;景天科技苑 &#x1f3c6;《頭銜》&#xff1a;大廠架構師&#xff0c;華為云開發者社區專家博主&#xff0c;…

OpenCV 高階實戰:圖像直方圖與掩碼圖像深度解析

目錄 一、圖像直方圖&#xff1a;讀懂圖像的 “像素分布報告” 1. 什么是圖像直方圖&#xff1f; 2. 圖像直方圖的核心作用 &#xff08;1&#xff09;分析亮度分布 &#xff08;2&#xff09;判斷對比度高低 &#xff08;3&#xff09;輔助圖像增強與閾值分割 &#xf…

基于stm32的家庭安全監測系統設計

若該文為原創文章&#xff0c;轉載請注明原文出處。一、引言&#xff08;一&#xff09;研究背景及意義背景&#xff1a;隨著智能家居概念的普及&#xff0c;人們對家庭安全、舒適度和節能提出了更高要求。傳統安防系統功能單一、各系統獨立&#xff0c;缺乏聯動和遠程管理能力…