P8805 [藍橋杯 2022 國 B] 機房

P8805 [藍橋杯 2022 國 B] 機房

分析

是一道lca題目,可以直接套模板 + 前綴和處理點權

具體思路:

1.n臺電腦用n-1條網線相連,任意兩個節點之間有且僅有一條路徑(拆分成各自到公共祖先節點的路徑——lca);

2.“延遲時間”:看成是節點點權(要求一條鏈上某個區間的值——前綴和)

——用sum[]存儲根節點到 i 節點的點權和

LCA

三種求法:

(1)樸素求法:

先將兩點位于同一深度,然后同時向上跳;一次查詢:O(n^2)

(2)倍增求法:

樸素求法的改進版(樸素是一步一步跳,倍增是用f[][]優化,每次向上都是以其父節點為目標)

(3)Tarjan(留一下,還沒學~)

倍增求法的步驟:

1.存圖/樹

2.dfs(int x,int father)更新f[][](表示節點 i 的第2^j個祖先節點)、d[](深度)

(1)更新d[x]和f[x][0]

(2)for(1~20)更新f[x][i]

(3)for(遍歷鄰接點)遞歸dfs()

3.lca

(1)先將兩點跳到同一深度(深度大的往上跳)

(2)若相等,則該點就是lca;若不相等,則從大到小,如果f[][]不等,則更新兩點,lca=f[x][0]

代碼?

#include<iostream>
#include<cstring>
using namespace std;const int N = 100010;
int head[N],d[N],f[N][30],a[N],sum[N],cnt,n,m;
struct edges{int to;int ne;
}e[N*2];//存兩條邊記得數組開成2倍//初始化別忘了(容易忘建議直接寫main中)
void init()
{memset(head,-1,sizeof head);
}
//鏈式前向星存邊
void addedge(int u,int v)
{e[cnt].to = v;e[cnt].ne = head[u];head[u] = cnt ++;
}
//dfs處理d[]、f[][]、sum[]
void dfs(int x,int father)
{d[x] = d[father] + 1;f[x][0] = father;sum[x] = sum[f[x][0]] + a[x];  //lca模板多了這一步~for(int i = 1;i <= 20;i ++){f[x][i] = f[f[x][i-1]][i-1];}for(int i = head[x];i != -1;i = e[i].ne){int j = e[i].to;if(j == father) continue; //加的是雙向邊,所以鄰接點有其父節點,遍歷時跳過dfs(j,x);	//遞歸遍歷}return ;
}
//lca找到最近公共祖先節點
int lca(int u,int v)
{if(d[u] < d[v]) swap(u,v);for(int i = 20;i >= 0;i --){if(d[f[u][i]] >= d[v]) u = f[u][i];}if(u == v){return u;}for(int i = 20;i >= 0;i --){if(f[u][i] != f[v][i]){u = f[u][i];v = f[v][i];}}return f[u][0];
}int main()
{init();scanf("%d %d",&n,&m);for(int i = 0;i < n - 1;i ++){int u,v;scanf("%d %d",&u,&v);a[u] ++,a[v] ++;addedge(u,v),addedge(v,u);}dfs(1,0);while(m --){int u,v;scanf("%d %d",&u,&v);int mid = lca(u,v);int ans = sum[u] + sum[v] - 2 * sum[mid] + a[mid];  //兩點之間的權值和printf("%d\n",ans);}return 0;
}

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

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

相關文章

Delphi7:SuperObject 的示例

SuperObject 不是一個 Delphi 7 自帶或官方的庫&#xff0c;但可能是指一些開源的 JSON 解析庫&#xff0c;比如 superobject 或 dwscript 中的 SuperObject。這些庫通常用于解析和生成 JSON 數據。 以下是一個基于假設的 SuperObject 用法概述&#xff0c;因為不同的庫可能有…

波搜索算法(WSA)-2024年SCI新算法-公式原理詳解與性能測評 Matlab代碼免費獲取

? 聲明&#xff1a;文章是從本人公眾號中復制而來&#xff0c;因此&#xff0c;想最新最快了解各類智能優化算法及其改進的朋友&#xff0c;可關注我的公眾號&#xff1a;強盛機器學習&#xff0c;不定期會有很多免費代碼分享~ 目錄 原理簡介 一、初始化階段 二、全…

我與C++的愛戀:string類的常見接口函數

? ? &#x1f525;個人主頁&#xff1a;guoguoqiang. &#x1f525;專欄&#xff1a;我與C的愛戀 朋友們大家好啊&#xff0c;本節我們來到STL內容的第一部分&#xff1a;string類接口函數的介紹 ? ? 1.string類的認識 給大家分享一個c文檔 https://legacy.cplusplus.…

Weblogic 管理控制臺未授權遠程命令執行漏洞(CVE-2020-14882,CVE-2020-14883)

1 漏洞概述 Weblogic Pre-Auth Remote Command Execution 漏洞&#xff08;CVE-2020-14882, CVE-2020-14883&#xff09;是針對 Oracle WebLogic Server 的兩個安全漏洞。CVE-2020-14882 允許遠程用戶繞過管理員控制臺組件中的身份驗證&#xff0c;而 CVE-2020-14883 則允許經…

Python3 筆記:Python的函數

函數是編寫好的&#xff0c;可重復調用的&#xff0c;用來實現某一功能的一段代碼。 也可以理解為做某事的方法和步驟。第一次做的時候寫好了方法&#xff0c;下次同類型的事直接拿來就用。 Python 內部有很多功能強大的內置函數供我們使用&#xff0c;除此之外&#xff0c;你…

Nagle算法

Nagle算法簡介 Nagle算法主要是避免發送小的數據包&#xff0c;要求TCP連接上最多只能有一個未被確認的小分組&#xff0c;在該分組的確認到達之前不能發送其他的小分組。 在默認的情況下,Nagle算法是默認開啟的&#xff0c;Nagle算法比較適用于發送方發送大批量的小數據&…

Sam Blackshear談Move語言的起源

Move編程語言作為Sui生態系統的關鍵組成部分&#xff0c;通過可編程交易區塊等機制支持其獨特的對象數據模型&#xff0c;并支持高效的代碼。五年前&#xff0c;Mysten Labs的聯合創始人兼首席技術官Sam Blackshear創建了Move。他專門設計了Move&#xff0c;用于編寫智能合約&a…

數據庫SQL查詢語句匯總詳解

SQL是一種強大的編程語句&#xff0c;可用于操作和提取數據庫中的數據。如果你對編程語句有所讓步&#xff0c;那么你可能對SQL的力量感到難以置信。本文將帶你深入探索SQL查詢的世界&#xff0c;讓你了解SQL語句的各種查詢方式&#xff0c;并以實例進行詳解。 1. SELECT基礎查…

Iterator底層源碼分析

/** * Iterator用于遍歷Collection下的集合&#xff0c;Collection下的每個集合底層實現不一樣&#xff0c;意味著遍歷邏輯也不一樣&#xff0c; * 所以Java的設計者將Iterator設計成了接口&#xff0c;讓Collection下的每個集合實現Iterator */ public interface Iterator<…

英偉達的GPU(1)

又好久沒更新了,一方面是最近事情有點多,另一方面最近也確實有點懶。 之前我說要把硬件部分補完,要寫Nvidia的GPU,我估計一篇寫不完,所以先寫點。 早先的硬件文章可以參考: 上一篇:解讀神秘的華為昇騰910 (qq.com) 上上一篇Microsoft Maia (qq.com) 上上上篇Google的…

sqli-labs靶場第十四關

目錄 1&#xff1a;分析 找閉合符&#xff1a; 2&#xff1a;開始注入 報錯注入&#xff1a; 注入數據庫名&#xff1a; 注入表名&#xff1a; 注入列名&#xff1a; 注入具體值&#xff1a; 1&#xff1a;分析 經過我們的實驗發現當我們輸入的密碼后面存在雙引號時會報…

【C++】學習筆記——多態_1

文章目錄 十二、繼承8. 繼承和組合 十三、多態1. 多態的概念2. 多態的定義和實現虛函數重寫的兩個特殊情況override 和 ?nal 3. 多態的原理1. 虛函數表 未完待續 十二、繼承 8. 繼承和組合 我們已經知道了什么是繼承&#xff0c;那組合又是什么&#xff1f;下面這種情況就是…

英語學習筆記13——A new dress

A new dress 一件新連衣裙 詞匯 Vocabulary colour / color n. 顏色 v. 上色&#xff0c;涂色  英  美 顏色短語&#xff1a;green hand 新手      black tea 紅茶      white house 白宮      black sheep 害群之馬 英文顏色類詞匯&#xff1a; red 紅色…

鴻蒙開發接口Ability框架:【ApplicationContext】

ApplicationContext ApplicationContext模塊提供開發者應用級別的的上下文的能力&#xff0c;包括提供注冊及取消注冊應用內組件生命周期的監聽接口。 說明&#xff1a; 開發前請熟悉鴻蒙開發指導文檔&#xff1a; gitee.com/li-shizhen-skin/harmony-os/blob/master/README.m…

靜態IP代理:網絡世界的隱秘通道

在數字化時代&#xff0c;網絡安全和隱私保護日益受到重視。靜態IP代理作為一種網絡服務&#xff0c;為用戶提供了一個穩定且可預測的網絡連接方式&#xff0c;同時保護了用戶的在線身份。本文將從五個方面深入探討靜態IP代理的概念、優勢、應用場景、技術實現以及選擇時的考量…

C語言學習【printf函數和scanf函數】

C語言學習【printf函數和scanf函數】 printf()函數和scanf()函數可以讓用戶與程序交流&#xff0c;是輸入/輸出函數 printf()函數 請求printf()函數打印數據的指令要與待打印數據的類型相匹配。例如&#xff0c;打印整數時使用%d&#xff0c;打印字符時使用%c。這些符號被稱…

實戰項目技術點(1)

1、什么是REST&#xff1f; REST&#xff08;Representational State Transfer&#xff09;&#xff0c;表述性狀態轉換&#xff0c;它是一種軟件架構風格。傳統URL風格如下&#xff1a; http://localhost:8080/user/getById?id1 GET&#xff1a;查詢id為1的用戶 http://loc…

網絡常識一:常用工具

作為后端開發&#xff0c;特別是網絡游戲后端開發&#xff0c;經常需要處理各種現網問題&#xff0c;其中有不少是網絡相關的。 下面列舉的工具主要是在 linux 下的&#xff0c;診斷線上服務器問題的時候&#xff0c;往往是分秒必爭&#xff0c;所以這些工具都要用得很熟練&am…

程序在銀河麒麟系統下實現開機自啟及創建桌面快捷方式

目錄 1. 機器環境說明 2. 程序開機自啟動設置 2.桌面快捷方式設置 3. 附加說明 1. 機器環境說明 機器安裝的銀河麒麟操作系統屬性如下&#xff1a; 2. 程序開機自啟動設置 第1步&#xff1a;編寫一個腳本,用于自動化啟動&#xff0c;為便于后文描述&#xff0c;該腳本名稱…

干貨教程【軟件篇】| 免費實現游戲加速自由

需要這個游戲加速軟件的小伙伴可以關注一下文章底部公眾號&#xff0c;回復關鍵詞【zdjs】即可獲取。 該軟件可以實現免費的游戲加速&#xff0c;實測延遲低體驗好&#xff01; 建議看到后趕緊保存下來防止丟失&#xff01; 下面講一下該軟件安裝流程~ 通過鏈接可以得到下面…