力扣2月最后三天的每日一題

力扣2月最后三天的每日一題

  • 前言
  • 2867.統計樹中的合法路徑數目
    • 思路
    • 確定1e5中的質數
    • 統計每個點的連接情況
    • 開始對質數點進行處理
    • 完整代碼
  • 2673.使二叉樹所有路徑值相等的最小代價
    • 思路
    • 完整代碼
  • 2581.統計可能的樹根數目
    • 思路
    • 建立連通關系
    • 將猜測數組變為哈希表,方便查詢
    • 利用dfs初始化根為0的猜測正確數量
    • 統計完整的結果


前言

不會做,全靠靈神的視頻講解

2867.統計樹中的合法路徑數目

思路

考慮質數節點,每個質數節點應該都有屬于它自己的多個連通塊,而每個連通塊中存在的非質數路徑那么就可以形成一條合法路徑
在這里插入圖片描述
所以我們需要去統計一個質數的連通塊中有多少非質數的連通情況,最后結果相加即可
在這里插入圖片描述

確定1e5中的質數

對于一個質數,其的倍數一定不是質數

    void checknp(bool* np){np[1] = true;for(int i = 2;i*i<MX+1;i++){for(j = i*i ;j <MX+1;j+=i){if(!np[i]){np[j] = true;}}}}

統計每個點的連接情況

根據傳入參數edgs數組,可以得到每個點與哪些點連接

        vector<vector<int>> connect(n+1);for(auto edge : edges){connect[edge[0]].push_back(edge[1]);connect[edge[1]].push_back(edge[0]);}

開始對質數點進行處理

我們需要用到記憶化搜索的技巧。當我們對一個非質數與哪些非質數連接情況進行討論后,我們可以將結果存儲,如果后面有質數節點也與該非質數節點連接,那么就可以直接使用了。

//記錄返回值 和 記憶化存儲非質數節點與多少個非質數節點連接
long long res = 0;
vector<int> mem(n+1);
for(int i = 1;i<n+1;i++)
{//如果是非質數,就可以跳過,因為我們只考慮質數的連通if(np[i]) continue;//記錄連通數int sum = 0;//對i的連通點進行處理結果for(int j : connect[i]){//只考慮非質數的情況if(!np[j]) continue;//如果沒有被搜索過if(mem[j] == 0){//存儲相互連接節點的數組清空nodes.clear();checknodes(j,-1,connect);//對于nodes數組里面的所有點,其連通點的個數都是nodes數組的長度for(int k : nodes){mem[k] = nodes.size();}}//計算結果,質數i下面的j連通塊res += mem[j] * sum;sum += mem[j];}//以質數為頭的結果res += sum;
}

完整代碼

const int MX = 1e5;
class Solution {
private:bool np[MX+1];vector<int> nodes;
public:void checknp(bool* np){np[1] = true;for(int i = 2;i*i<MX+1;i++){for(int j = i*i ;j <MX+1;j+=i){if(!np[i]){np[j] = true;}}}}void checknodes(int x,int fa,vector<vector<int>>& connect){nodes.push_back(x);for(int y:connect[x]){if(y!=fa&&np[y]){checknodes(y,x,connect);}}}
public:long long countPaths(int n, vector<vector<int>>& edges) {checknp(np);vector<vector<int>> connect(n+1);for(auto edge : edges){connect[edge[0]].push_back(edge[1]);connect[edge[1]].push_back(edge[0]);}//結果long long res = 0;//記憶化搜索vector<int> mem(n+1);for(int i = 1;i<n+1;i++){if(np[i]) continue;//記錄當前節點的連接數int sum = 0;for(int j : connect[i]){if(!np[j]) continue;//如果沒被遍歷過if(mem[j] == 0){nodes.clear();checknodes(j,-1,connect);//修改記憶存儲結果for(int k : nodes){mem[k] = nodes.size();}}//統計該連通塊對結果的影響res += mem[j]*sum;sum += mem[j];}//已質數節點為頭的情況res += sum;}return res;}
};

2673.使二叉樹所有路徑值相等的最小代價

思路

從葉子節點開始,計算根節點到該葉子節點的路徑和,然后修改其中一個葉子節點使得和相等,由于只能增加,所以向大值修改。
修改完成后將該和返回給葉子節點的父節點,然后比較同一層級的父節點的和,進行修改。
逐步返回直到根節點

完整代碼

對于滿二叉樹,父節點和左右子結點在數組中存在一個關系。

class Solution {
public:int minIncrements(int n, vector<int>& cost) {//統計每個節點的路徑和for(int i = 2;i<n+1;i++){cost[i-1] += cost[i/2-1];}//更新結果int res = 0;for(int i = n/2;i>0;i--){res += abs(cost[2*i]-cost[2*i-1]);cost[i-1] = max(cost[2*i],cost[2*i-1]);}return res;}
};

2581.統計可能的樹根數目

思路

還不是很明白
我們假設以0為根的正確猜測是cnt0,那調換到以1為根,那么cnt1的值
首先需要減去guesses數組[0,1]的數量,再加上[1,0]的數量,因為[u,v]表示u是v的父節點。
其余調換類似。

建立連通關系

vector<vector<int>> g(edges.size() + 1);
for (auto &e : edges) 
{int x = e[0], y = e[1];g[x].push_back(y);g[y].push_back(x);
}

將猜測數組變為哈希表,方便查詢

unordered_set<LL> s;
for (auto &e : guesses) 
{ // guesses 轉成哈希表s.insert((LL) e[0] << 32 | e[1]); // 兩個 4 字節數壓縮成一個 8 字節數
}

利用dfs初始化根為0的猜測正確數量

int ans = 0, cnt0 = 0;
function<void(int, int)> dfs = [&](int x, int fa) 
{//y與x連通for (int y : g[x]){//y不是父節點,防止反向計算if (y != fa) {//[x,y]如果存在哈希表中,表面以0為根的結果猜測正確+1cnt0 += s.count((LL) x << 32 | y); // 以 0 為根時,猜對了//以當前節點為父節點搜索子結點dfs(y, x);}}
};
dfs(0, -1);

統計完整的結果

//計算以x為根的cnt
function<void(int, int, int)> reroot = [&](int x, int fa, int cnt) 
{ans += cnt >= k; // 此時 cnt 就是以 x 為根時的猜對次數for (int y : g[x]) {if (y != fa) {//從0開始,變換根為0的連通節點,在變換為連通節點的連通節點reroot(y, x, cnt- s.count((LL) x << 32 | y)   // 原來是對的,現在錯了+ s.count((LL) y << 32 | x)); // 原來是錯的,現在對了}}
};
reroot(0, -1, cnt0);

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

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

相關文章

2280. 最優標號(最小割,位運算)#困難,想不到

活動 - AcWing 給定一個無向圖 G(V,E)&#xff0c;每個頂點都有一個標號&#xff0c;它是一個 [0,2^31?1] 內的整數。 不同的頂點可能會有相同的標號。 對每條邊 (u,v)&#xff0c;我們定義其費用 cost(u,v) 為 u 的標號與 v 的標號的異或值。 現在我們知道一些頂點的標號…

七通道NPN 達林頓管GC2003,專為符合標準 TTL 而制造,最高工作電壓 50V,耐壓 80V

GC2003 內部集成了 7 個 NPN 達林頓晶體管&#xff0c;連接的陣列&#xff0c;非常適合邏輯接口電平數字電路&#xff08;例 如 TTL&#xff0c;CMOS 或PMOS 上/NMOS&#xff09;和較高的電流/電壓&#xff0c;如電燈電磁閥&#xff0c;繼電器&#xff0c;打印機或其他類似的負…

讀《代碼整潔之道》有感

最近讀了一本書&#xff0c;名字大家都看到了&#xff1a;《代碼整潔之道》&#xff0c;之前一直只是聽說過這本書的大名&#xff0c;卻一直沒有進行拜讀&#xff0c;最近想起來了就想著看一看&#xff0c;不看不要緊&#xff0c;看了之后就像吃了炫邁&#xff0c;根本停不下來…

MATLAB環境下腦電信號EEG的譜分析

腦電信號一直伴隨著人類的生命&#xff0c;腦電波是腦神經細胞發生新陳代謝、離子交換時細胞群興奮突觸電位總和&#xff0c;腦電信號的節律性則和丘腦相關&#xff0c;含有豐富的大腦活動信息。通常我們所接觸的腦電圖都是頭皮腦電圖&#xff0c;在有些特殊場合還需要皮下部位…

10.廣域網技術

1. PPP實驗點這里&#xff08;拓撲代碼&#xff09; 2. PPPoE配置實驗點這里&#xff08;拓撲代碼&#xff09; 目錄 一、廣域網二、PPP協議三、PPP鏈路建立過程1-LCP&#xff08;鏈路協商&#xff09;四、PPP鏈路建立過程2-PAP/CHAP&#xff08;認證協商&#xff0c;可選&…

linux系統多個mysql時的部署和服務注冊

在一次實際部署過程中,碰到了服務器已經部署了一個mysql服務. 再部署新的mysql時,特別注意不能與另一個mysql互相影響.記錄一次部署中存在的問題和解決方法. 因為已存在mysql,新的mysql部署采用的是mysql.tar.gz解壓手動安裝,避免.rpm或者.deb等自動安裝方式覆蓋了已有mysql的配…

python語言1

一、pytho中的注釋 1.1注釋的理解 程序員在代碼中對代碼功能解釋說明的標注性文字可以提高代碼的可讀性注釋的內容將被python解釋器忽略&#xff0c;不被計算機執行 1.2注釋的分類 注釋分為&#xff1a;單行注釋、多行注釋、中文聲明注釋 &#xff08;1&#xff09;單行注…

LeetCode240題:搜索二維矩陣II(python3)

代碼思路&#xff1a; “根節點” 對應的是矩陣的 “左下角” 和 “右上角” 元素&#xff0c;以 matrix 中的左下角元素為標志數 flag &#xff0c;則有: 若 flag > target &#xff0c;則 target 一定在 flag 所在行的上方 &#xff0c;即 flag 所在行可被消去&#xff0c…

kotlin安卓開發教程視頻,2024年Android開發陷入飽和

Android基礎 1、什么是ANR 如何避免它&#xff1f; 如果耗時操作需要讓用戶等待&#xff0c;那么可以在界面上顯示進度條。 2、View的繪制流程&#xff1b;自定義View如何考慮機型適配&#xff1b;自定義View的事件 3、分發機制&#xff1b;View和ViewGroup分別有哪些事件分…

Java協議解析:探索網絡編程的核心

引言 在當今數字化時代&#xff0c;網絡編程扮演著日益重要的角色&#xff0c;而Java協議則成為這個領域中不可或缺的一部分。隨著互聯網的普及和各種網絡應用的不斷涌現&#xff0c;對網絡通信的要求也變得越來越嚴格&#xff0c;這就需要對Java協議進行深入的理解和探索。本…

【知識管理】計算全局效率 Network global efficiency

這句話提到的“全局效率”&#xff08;global efficiency&#xff09;是網絡中信息傳遞效率的一個衡量指標&#xff0c;它是網絡中最短路徑長度的倒數的平均值。為了更好地理解這個概念&#xff0c;讓我們分解這個定義&#xff1a; 最短路徑長度&#xff08;Shortest Path Len…

輸出數據庫全部表的外鍵引用拓撲結構

執行 sql&#xff1a; SELECTconstraint_name,table_name,column_name,referenced_table_name,referenced_column_name FROMinformation_schema.key_column_usage WHEREtable_schema ${databaseName} ANDreferenced_table_name IS NOT NULL 將執行結果復制到臨時文件中&#…

【Leetcode每日一刷】貪心算法|122.買賣股票的最佳時機 II、55. 跳躍游戲

一、122.買賣股票的最佳時機 II 力扣題目鏈接 &#x1f984;解題思路&#xff1a; 首先需要明確的幾個點&#xff1a; 當前只能有最大一支股票每一天操作只能3選1&#xff1a;買or賣or休息 此外&#xff0c;對于貪心&#xff0c;總有像下面圖示的一種直覺&#xff1a;如果…

力扣SQL50 產品銷售分析 I 查詢

Problem: 1068. 產品銷售分析 I 思路 left join on&#xff1a;左連接 Code select p.product_name, s.year, s.price from Sales s left join Product p on s.product_id p.product_id

靠譜的車【華為OD機試-JAVAPythonC++JS】

題目描述 程序員小明打了一輛出租車去上班。出于職業敏感&#xff0c;他注意到這輛出租車的計費表有點問題&#xff0c;總是偏大。 出租車司機解釋說他不喜歡數字4&#xff0c;所以改裝了計費表&#xff0c;任何數字位置遇到數字4就直接跳過&#xff0c;其余功能都正常。 比如&…

Scaffold 腳手架

Scaffold 腳手架 Scaffold 腳手架組件是一個核心組件&#xff0c;它為開發者提供了一個標準的、可定制的應用界面框架。androidx.compose.material3.Scaffold 包含了應用界面的基礎元素&#xff0c;如狀態欄、導航欄、頂部應用欄&#xff08;TopAppBar&#xff09;等。通過 Sc…

Windows的Docker-Desktop安裝與問題總結

目錄 Docker-Desktop安裝步驟 環境配置 Docker-Desktop安裝問題總結 問題1&#xff1a;docker-desktop setting界面一直加載轉圈 問題2&#xff1a;docker鏡像的存儲位置變更&#xff08;防止C盤空間不足&#xff09; 參考文獻&#xff1a; Docker-Desktop安裝步驟 環境…

又挖到寶了!國人團隊研發的AI視頻工具PixVerse,這么好用居然還完全免費!(強烈推薦)

昨天發了一款國產免費的 AI 繪畫工具 Dreamina 的介紹&#xff1a; 居然才發現&#xff01;字節跳動旗下國產AI繪畫工具Dreamina&#xff0c;這么好用居然還免費&#xff01;&#xff08;強烈推薦&#xff09; 發現大家對國產 AI 工具還挺感興趣的。今天繼續幫大家挖國產的 A…

【Leetcode每日一題】二分查找 - 山脈數組的峰頂索引(難度??)(23)

1. 題目解析 Leetcode鏈接&#xff1a;852. 山脈數組的峰頂索引 這個問題的理解其實相當簡單&#xff0c;只需看一下示例&#xff0c;基本就能明白其含義了。 核心在于找到題目中所說的峰值所在的下標并返回他們的下標即可。 2. 算法原理 峰頂及兩側數據特點分析 峰頂數據…

運算放大電路常用接法

1、反相比例運算電路 2、同相比例運算電路 3、電壓跟隨器 4、反相求和運算電路 5、同相求和運算電路 6、加減運算電路 7、加減電路 8、積分運算電路 9、實用積分電路 10、微分運算電路 11、實用微分電路 12、壓控電壓源二階低通濾波器 13、壓控電壓源二階高通濾波器 14、RC橋式…