【CF】Day66——Edu 168.D + CF 853 (Div. 2).C (樹 + 二分 + 貪心 | 組合數學)

D. Maximize the Root

題目:

?

思路:

樹上二分,中下題

我們可以發現如果 x 可以,那么 x - 1 肯定也可以,所以可以直接二分答案

具體的,我們每次二分能增加的值 mid ,如果 a[i] < mid,那么子樹就要 a[i] + a[i] - mid 個,否則直接遞歸子樹即可,以此類推,具體實現看代碼

代碼:

#include <iostream>
#include <algorithm>
#include<cstring>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <memory>
using namespace std;
#define int long long
#define yes cout << "Yes\n"
#define no cout << "No\n"void solve()
{int n;cin >> n;vector<int> a(n + 1);vector<vector<int>> g(n + 1);for (int i = 1; i <= n; i++){cin >> a[i];}for (int i = 2; i <= n; i++){int p; cin >> p;g[p].push_back(i);}if (n == 1){cout << a[1] << endl;return;}auto check = [&](int need) ->bool{int flag = 1;auto dfs = [&](auto self,int fa,int needval) ->void{if (!flag){return;}if (fa != 1)needval += max(needval - a[fa], 0LL);if (needval > a[fa] && g[fa].empty() || needval > 1e9){flag = 0;return;}for (auto& son : g[fa]){self(self, son, needval);}};dfs(dfs, 1, need);return flag;};int l = 0, r = 1e9;while (l + 1 < r){int mid = l + r >> 1;if (check(mid)){l = mid;}else{r = mid;}}if (check(r)){cout << a[1] + r << endl;return;}cout << a[1] + l << endl;
}signed main()
{cin.tie(0)->sync_with_stdio(false);int t = 1;cin >> t;while (t--){solve();}return 0;
}


C. Serval and Toxel's Arrays

題目:

思路:

很考驗實現方式的一題

遇到這種題,我們要知道拆分,即把每個數的奉獻算出來再累加即可

對于一個數 x,如果 我們選了一個 沒有 x 的數組,那么奉獻就是 1,取有 x 的數列,奉獻也是 1,但是這是兩種不同的取法,所以我們可以分開計算(特別的一共有 m + 1個數組,因為還有初始數組)

對于第一種取法,那么就是 cnt += xhas * (m + 1 - xhas),其中 xhas 為 x 的數量

對于第二種取法,有 cnt += xhas * (xhas-1) / 2

由于 n + m 不是很大,所以枚舉 n+m 的每一個數是可行的,那么如何快速計算 xhas 成了問題

我們可以這樣想,由于每次只改變一個數,那么也就是說如果某個數一直沒改變,那么最后肯定有 m + 1 個,而如果中間改變過,那么肯定在改變之前這個數就一直存在了,也就是連續的某一段全含有 x,所以我們可以存儲 last[i] 代表上一個數是否存在,以及如果存在它的位置在哪里

這樣我們就解決了 xhas 的問題,具體實現看代碼

代碼:

#include <iostream>
#include <algorithm>
#include<cstring>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <memory>
using namespace std;
#define int long long
#define yes cout << "Yes\n"
#define no cout << "No\n"void solve()
{int n, m;cin >> n >> m;vector<int> a(n+1),last(n+m+1,-1),cnt(n+m+1,0);for (int i = 1; i <= n; i++){cin >> a[i];last[a[i]] = 0;}for (int i = 1; i <= m; i++){int p, v;cin >> p >> v;if (a[p] != v){cnt[a[p]] += i - last[a[p]];last[a[p]] = -1;last[v] = i;a[p] = v;}}int res = 0;for (int i = 1;i <= n+m;i++){if (last[i] != -1){cnt[i] += m - last[i] + 1;}}for (int i = 1; i <= n + m; i++){res += cnt[i] * (m + 1 - cnt[i]);res += cnt[i] * (cnt[i] - 1) / 2;}cout << res << endl;
}signed main()
{cin.tie(0)->sync_with_stdio(false);int t = 1;cin >> t;while (t--){solve();}return 0;
}

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

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

相關文章

生成對抗網絡(GANs)中的損失函數公式 判別器最優解D^*(x)的推導

https://www.bilibili.com/video/BV1YyHSekEE2 這張圖片展示的是生成對抗網絡&#xff08;GANs&#xff09;中的損失函數公式&#xff0c;特別是針對判別器&#xff08;Discriminator&#xff09;和生成器&#xff08;Generator&#xff09;的優化目標。讓我們用Markdown格式逐…

分布式爬蟲架構設計

隨著互聯網數據的爆炸式增長&#xff0c;單機爬蟲已經難以滿足大規模數據采集的需求。分布式爬蟲應運而生&#xff0c;它通過多節點協作&#xff0c;實現了數據采集的高效性和容錯性。本文將深入探討分布式爬蟲的架構設計&#xff0c;包括常見的架構模式、關鍵技術組件、完整項…

[java]eclipse中windowbuilder插件在線安裝

目錄 一、打開eclipse 二、打開插件市場 三、輸入windowbuilder&#xff0c;點擊install 四、進入安裝界面 五、勾選我同意... 重啟即可 一、打開eclipse 二、打開插件市場 三、輸入windowbuilder&#xff0c;點擊install 四、進入安裝界面 五、勾選我同意... 重啟即可

sass,less是什么?為什么要使用他們?

理解 他們都是css的預處理器,允許開發者通過更高級的語法編寫css代碼(支持變量,嵌套),然后通過編譯成css文件 使用原因 結構清晰,便于擴展提高開發效率,便于后期開發維護

Java設計模式之模板方法模式:從基礎到高級的全面解析(最詳解)

文章目錄 一、模板方法模式基礎概念1.1 什么是模板方法模式1.2 模板方法模式的核心結構1.3 模板方法模式中的方法分類1.4 模板方法模式的簡單示例二、模板方法模式的深入解析2.1 模板方法模式的核心原理2.2 模板方法模式的優勢與適用場景優勢分析適用場景2.3 模板方法模式與其他…

【C/C++】如何在一個事件驅動的生產者-消費者模型中使用觀察者進行通知與解耦

文章目錄 如何在一個事件驅動的生產者-消費者模型中使用觀察者進行通知與解耦?1 假設場景設計2 Codes3 流程圖4 優劣勢5 風險可能 如何在一個事件驅動的生產者-消費者模型中使用觀察者進行通知與解耦? 1 假設場景設計 Producer&#xff08;生產者&#xff09;&#xff1a;生…

MVC和MVVM架構的區別

MVC和MVVM都是前端開發中常用的設計模式&#xff0c;都是為了解決前端開發中的復雜性而設計的&#xff0c;而MVVM模式則是一種基于MVC模式的新模式。 MVC(Model-View-Controller)的三個核心部分&#xff1a;模型、視圖、控制器相較于MVVM(Model-View-ViewModel)的三個核心部分…

蘭亭妙微 | 圖標設計公司 | UI設計案例復盤

在「33」「312」新高考模式下&#xff0c;選科決策成為高中生和家長的「頭等大事」。蘭亭妙微公司受委托優化高考選科決策平臺個人診斷報告界面&#xff0c;核心挑戰是&#xff1a;如何將復雜的測評數據&#xff08;如學習能力傾向、學科報考機會、職業興趣等&#xff09;轉化為…

有銅半孔的設計規范與材料創新

設計關鍵參數 孔徑與間距限制 最小孔徑需≥0.6mm&#xff0c;孔邊距≥0.5mm&#xff0c;避免銅層脫落&#xff1b;拼版時半孔區域需預留2mm間距防止撕裂。 阻焊橋設計 必須保留阻焊橋&#xff08;寬度≥0.1mm&#xff09;&#xff0c;防止焊錫流入孔內造成短路。 獵板的材料…

Engineering a direct k-way Hypergraph Partitioning Algorithm【2017 ALENEX】

文章目錄 一、作者二、摘要三、相關工作四、算法概述五、實驗結果六、主要貢獻 一、作者 Yaroslav Akhremtsev, Tobias Heuer, Peter Sanders, Sebastian Schlag 二、摘要 我們開發了一種快速且高質量的多層算法&#xff0c;能夠直接將超圖劃分為 k 個平衡的塊 —— 無需借助遞…

視頻問答功能播放器(視頻問答)視頻彈題功能實例

視頻問答播放器是一種互動教學工具&#xff0c;在視頻播放過程中彈出題目卡&#xff0c;學員答題后才能繼續觀看&#xff0c;提升學習參與度。視頻問答功能播放器(視頻問答)視頻彈題功能實例&#xff1a; 視頻播放器的視頻問答功能&#xff08;也叫問答播放器、視頻彈題、視頻問…

2025年AI代理演進全景:從技術成熟度曲線到產業重構

2025年AI代理演進全景&#xff1a;從技術成熟度曲線到產業重構 一、技術成熟度曲線定位&#xff1a;AI代理的“期望膨脹期” 根據Gartner技術成熟度曲線&#xff08;Hype Cycle?&#xff09;&#xff0c;AI代理&#xff08;Agentic AI&#xff09;當前正處于期望膨脹期向泡沫…

基于python的機器學習(八)—— 評估算法(一)

目錄 一、機器學習評估的基本概念 1.1 評估的定義與目標 1.2 常見評估指標 1.3 訓練集、驗證集與測試集的劃分 二、分離數據集 2.1 分離訓練數據集和評估數據集 2.2 k折交叉驗證分離 2.3 棄一交叉驗證分離 2.4 重復隨機評估和訓練數據集分離 三、交叉驗證技術 3.…

Win11 系統登入時綁定微軟郵箱導致用戶名欠缺

Win11 系統登入時綁定微軟郵箱導致用戶名欠缺 解決思路 -> 解綁當前微軟郵箱和用戶名 -> 斷網離線建立本地賬戶 -> 設置本地賬戶為Admin權限 -> 注銷當前賬戶&#xff0c;登入新建的用戶 -> 聯網綁定微軟郵箱 -> 刪除舊的用戶命令步驟 管理員權限打開…

Mac系統-最方便的一鍵環境部署軟件ServBay(支持php,java,python,node,go,mysql等)沒有之一,已親自使用!

自從換成Mac電腦以后&#xff0c;做開發有時候要部署各種環境&#xff0c;如php&#xff0c;mysql&#xff0c;nginx&#xff0c;pgsql&#xff0c;java&#xff0c;node&#xff0c;python&#xff0c;go時&#xff0c;嘗試過原生環境部署&#xff0c;各種第三方軟件部署&…

Flink中Kafka連接器的基本應用

文章目錄 前言Kafka連接器基礎案例演示前置說明和環境準備步驟Kafka連接器基本配置關聯數據源映射轉換案例效果演示基于Kafka連接器同步數據到MySQL案例說明前置準備Kafka連接器消費位點調整映射轉換與數據投遞MysqlSlink持久化收集器數據最終效果演示小結參考前言 本文將基于…

Leetcode 刷題記錄 11 —— 二叉樹第二彈

本系列為筆者的 Leetcode 刷題記錄&#xff0c;順序為 Hot 100 題官方順序&#xff0c;根據標簽命名&#xff0c;記錄筆者總結的做題思路&#xff0c;附部分代碼解釋和疑問解答&#xff0c;01~07為C語言&#xff0c;08及以后為Java語言。 01 二叉樹的層序遍歷 /*** Definition…

【R語言科研繪圖】

R語言在繪制SCI期刊圖像時具有顯著優勢&#xff0c;以下從功能、靈活性和學術適配性三個方面分析其適用性&#xff1a; 數據可視化庫豐富 R語言擁有ggplot2、lattice、ggpubr等專業繪圖包&#xff0c;支持生成符合SCI期刊要求的高分辨率圖像&#xff08;如TIFF/PDF格式&#…

【Node.js】Web開發框架

個人主頁&#xff1a;Guiat 歸屬專欄&#xff1a;node.js 文章目錄 1. Node.js Web框架概述1.1 Web框架的作用1.2 Node.js主要Web框架生態1.3 框架選擇考慮因素 2. Express.js2.1 Express.js概述2.2 基本用法2.2.1 安裝Express2.2.2 創建基本服務器 2.3 路由2.4 中間件2.5 請求…

PDF 轉 JPG 圖片小工具:CodeBuddy 助力解決轉換痛點

本文所使用的 CodeBuddy 免費下載鏈接&#xff1a;騰訊云代碼助手 CodeBuddy - AI 時代的智能編程伙伴 前言 在數字化辦公與內容創作的浪潮中&#xff0c;將 PDF 文件轉換為 JPG 圖片格式的需求日益頻繁。無論是學術文獻中的圖表提取&#xff0c;還是宣傳資料的視覺化呈現&am…