【補題】Codeforces Global Round 26 E. Shuffle

題意:給出一棵樹,按照以下方式操作
對于當前的所有任意子樹,選出任何一個點從中刪除,然后作為新子樹的根插入到新的樹中,以此遞歸往復,直到原來的樹中節點全部進入新樹,問新樹最多有多少個葉子節點。
然后如果根節點只有一個聯通的點,那么自己也算葉子

思路:Codeforces Global Round 26 (A - E) - Lu_xZ - 博客園

1.首先對于題意進行解析,這個操作是在干什么,然后發現,任意相鄰的節點不能同時為葉子節點,然后如果我們把葉子節點歸為一類,就會發現所有的葉子節點就是最大獨立集
最大獨立集:選出的點集中,任何一個子集都不滿足在原圖上可以互相抵達
舉例:1-2-3-4-5-6,1作為根節點可以跟3連,2就變成了子節點,4-5-6作為新的子樹
也就是說為什么發現的,任何一個點想成為葉子節點,只要在當前子樹中選擇一個相鄰節點,自己就可以變成葉子節點

2.發現是最大獨立集,那么接下來該如何是好?因為任何一個點都可能成為根節點,于是乎考慮換根dp,這個應該要稍微靠一點感覺……
任何一個節點的子樹所選中的狀態不會因為另外一邊子樹的狀態受影響,這是換根dp的關鍵,因為這樣才能順序的求出

3.于是乎開始dp,首先求出假設某一個節點是根節點的子樹選擇情況,這里就默認選1了

?f[3]代表3節點的情況,但是要分類f[3][0/1],代表圖中形狀的子樹3節點作為葉子節點和不是葉子節點的情況
之后得到狀態轉移方程
f[x][0]+=max(f[u][0],f[u][1])? ?當前節點不是葉子節點,那么相鄰節點可以是葉子節點也可以不是
f[x][1]+=f[u][0]? ? 當前節點是葉子節點,相鄰節點只能不是葉子節點


接下來換根

假設以2為根,f[2]所擁有的狀態只是紅色部分子樹,而另一邊就可以由父節點減去當前子樹得到
然后在此基礎上進行拼接,就完成了換根的操作

然后因為另一邊子樹只受到子樹根節點的影響,所以才能進行換根dp
我們將橙色區域稱為temp(f[1]-f[2])
那么新的dp轉移
g[x][0]=std::max(g[fa][1],f[x][0]+temp);? ?g[fa][1]其實跟f[2][0]+(f[1]-f[2])[1]是一致的,然后另一種拼接求最多的那個
g[x][1]=temp+f[x][1];

完成dp的狀態轉移
最后求答案g[x][0]+(ve[x].size()==1);?
ve[x].size()==1是因為根節點本身可能也是葉子節點,但在dp的過程中,自己作為葉子節點是不可以的,是別人作為非葉子節點的,自己才可以選擇作為葉子節點,根作為第一個節點沒有能力選擇一個父節點作為非葉子節點,只能是自己,先有非葉子節點,才有葉子節點
任何一個點想成為葉子節點,只要在當前子樹中選擇一個相鄰節點,自己就可以變成葉子節點

掃描完成全部,那么本道題就結束了

代碼

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define IOS                       \std::ios::sync_with_stdio(0); \std::cin.tie(0);              \std::cout.tie(0)const int N = 3e5 + 5;
const int INF = 1e18;
const int MOD = 998244353;
// const int MOD=1e9+7;
// const int MOD=100003;
const int maxn=5e5+10;std::vector<int> ve[N];
int f[N][2];
int g[N][2];void dfs(int x,int fa){f[x][0]=0;f[x][1]=1;for(auto i : ve[x]){if(i==fa) continue;dfs(i,x);f[x][1]+=f[i][0];f[x][0]+=std::max(f[i][0],f[i][1]);}
}int ans=0;
void dfs2(int x,int fa){int temp=g[fa][0]-std::max(f[x][0],f[x][1]);g[x][1]=temp+f[x][1];g[x][0]=std::max(g[fa][1],f[x][0]+temp);temp=g[x][0]+(ve[x].size()==1);ans=std::max(ans,temp);for(auto i : ve[x]){if(i==fa) continue;dfs2(i,x);}
}void solve(){int n;std::cin >> n;ans=0;for(int i=1;i<=n;i++){ve[i].clear();f[i][0]=f[i][1]=g[i][0]=g[i][1]=0;}for(int i=1;i<n;i++){int x,y;std::cin >> x >> y;ve[x].push_back(y);ve[y].push_back(x);}    dfs(1,0);g[1][0]=f[1][0];g[1][1]=f[1][1];ans=g[1][0]+(ve[1].size()==1);for(auto i : ve[1])dfs2(i,1);std::cout << ans << '\n';
}signed main()
{IOS;int t = 1;std::cin >> t;while (t--){solve();}
}

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

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

相關文章

金倉數據庫風云

O 記我用了這么多年&#xff0c;我最有發言權&#xff0c;我可不敢替&#xff0c;你們誰能搞定&#xff0c;誰上。” 老鄧在會上&#xff0c;狠狠甩了一句氣話。老鄧&#xff08;鄧銘&#xff09;&#xff0c;某大型期貨交易所信息化主管&#xff0c;數據庫老司機。 作為圈里最…

阿里云寶塔Linux面板相關操作記錄

1、清空nginx緩存使用Nginx時&#xff0c;靜態圖片文件會出現緩存&#xff0c;所以需要清空緩存&#xff0c;方法如下&#xff1a;sudo rm -rf /www/server/nginx/proxy_cache_dir/*2、Windows啟動spring boot jar腳本echo off setlocal enabledelayedexpansion:: 配置項目名 s…

Kotlin伴生對象

你已經知道如何為類創建單例對象&#xff08;singleton&#xff09;。不過&#xff0c;在很多情況下&#xff0c;你只需要為某個類維護一個單例&#xff0c;這時候使用類的完整名字會顯得冗長。比如&#xff0c;你可能只需要存儲一個公共的屬性。這種情況下&#xff0c;可以用 …

4G車載錄像機的作用詳解:提升行車安全與智能管理的核心技術

1. 引言隨著物流運輸、公共交通、特種車輛等行業對安全與管理需求的提升&#xff0c;4G車載錄像機已成為現代車輛智能化管理的重要組成部分。它不僅具備傳統行車記錄儀的錄像功能&#xff0c;還結合4G無線通信、AI智能分析、GPS定位、云存儲等技術&#xff0c;實現遠程監控、實…

技術與情感交織的一生 (十)

目錄 笑傲江湖 上 恨 嫌隙 掙扎 救難 論道 取巧 聯手 入魔 決裂 治傷 聚氣 傾心 笑傲江湖 上 恨 身邊的許多朋友都是金庸武俠迷&#xff0c;我也是其中之一。有人說&#xff0c;我的技術像 “任我行” &#xff0c;“吸星大法” 學到最后顯得不倫不類&#xf…

架構進階——解讀集團IT管控治理體系總體規劃【附全文閱讀】

集團IT管控治理體系正步入高質量發展階段&#xff0c;旨在重塑信息化管理價值&#xff0c;解決集團化管理的核心挑戰。首要問題是縱向與橫向的協同管控&#xff0c;需明確各層級在集團戰略決策中的角色與責任&#xff0c;促進跨部門、跨子公司的高效協同。高管激勵機制與人才梯…

亞馬遜自養號測評實戰指南:從環境搭建到安全提排名

在亞馬遜平臺上&#xff0c;自養號測評系統的成敗差異主要源于技術合規性、操作精細度和風控策略的差異。以下是關鍵因素的分析&#xff1a;&#x1f512; 一、環境隔離與偽裝技術底層環境穩定性成功案例&#xff1a;采用獨立服務器硬件參數偽裝&#xff08;如唯一MAC地址、IME…

CSS中的transform

在 CSS 中&#xff0c;transform 是用于用于用于對元素進行幾何變換的屬性&#xff0c;可實現旋轉、縮放、平移、傾斜等效果&#xff0c;且不會影響其他元素的布局&#xff08;不會觸發重排&#xff09;。以下是其核心用法和特性&#xff1a; 1. 基本語法 element {transform: …

MyBatis攔截器插件:實現敏感數據字段加解密

文章目錄一、寫在前面二、編碼實現1、注解2、攔截器插件3、配置插件4、實體類5、測試三、擴展1、優化點一、寫在前面 日常開發中&#xff0c;經常有一些敏感數據&#xff0c;直接寫入數據庫的話&#xff0c;很容易泄露。 本文基于mybatis攔截器插件&#xff0c;實現敏感數據的…

C++_Hello算法_隊列

隊列&#xff08;queue&#xff09;是一種遵循先入先出規則的線性數據結構。顧名思義&#xff0c;隊列模擬了排隊現象&#xff0c;即新來的人不斷加入隊列尾部&#xff0c;而位于隊列頭部的人逐個離開。 如圖 5-4 所示&#xff0c;我們將隊列頭部稱為“隊首”&#xff0c;尾部…

LeetCode 1.

問題描述 倆數之和&#xff1a; 給定一個整數數組 nums 和一個整數目標值 target&#xff0c;請你在該數組中找出 和為目標值 target 的那 兩個 整數&#xff0c;并返回它們的數組下標。你可以假設每種輸入只會對應一個答案&#xff0c;并且你不能使用兩次相同的元素。你可以按…

c練習-c基礎

#include <stdio.h>int main() {//打印數組中的最大值int arr[10];int max,i;for (i 0; i < 10; i){scanf_s("%d", &arr[i]);}max arr[0];for (i 0; i < 10; i){if(max < arr[i 1]){max arr[i 1];}}printf("數組中最大值&#xff1a;%…

Numpy科學計算(五分鐘小白從入門到精通)

2.1 numpy介紹numpy是Python中科學計算的基礎包。它是一個Python庫&#xff0c;提供多維數組對象、各種派生對象&#xff08;例如掩碼數組和矩陣&#xff09;以及用于對數組進行快速操作的各種方法&#xff0c;包括數學、邏輯、形狀操作、排序、選擇、I/O 、離散傅里葉變換、基…

從零掌握微服務通信安全:mTLS全解析

&#x1f525;「炎碼工坊」技術彈藥已裝填&#xff01; 點擊關注 → 解鎖工業級干貨【工具實測|項目避坑|源碼燃燒指南】 在云原生時代&#xff0c;微服務架構的普及帶來了靈活性和可擴展性&#xff0c;但也讓服務間通信的安全性成為核心挑戰。mTLS&#xff08;Mutual TLS&…

Node.js net.Socket.destroy()深入解析

socket.destroy() 是 Node.js net 模塊中用于強制銷毀 TCP 套接字的方法&#xff0c;比 socket.end() 更徹底。下面我將從多個方面全面講解這個方法。 基本用法 const net require(net);const server net.createServer((socket) > {// 強制銷毀套接字socket.destroy(); })…

vmware 克隆虛擬機,報錯:克隆時出錯:指定不存在的設備。然后電腦卡死,只能強制關機再開機。

vmware 克隆虛擬機&#xff0c;報錯&#xff1a;克隆時出錯:指定不存在的設備。然后電腦卡死&#xff0c;只能強制關機再開機。1、問題描述2、問題原因3、解決方法1、問題描述 vmware 版本&#xff1a;vmware workstation pro 17.6.3 克隆虛擬機時&#xff0c;創建完整克隆&am…

如何使用Python將任意PPT變為“智能模板”(解決 python-pptx 替換元素無法保留格式的問題,陰影、填充等屬性保留!)

文章目錄 ?? 介紹 ?? ?? 演示環境 ?? ?? 深入 OpenXML:格式保留的終極武器 ?? ?? 如何打造你自己的“格式保留”PPT模板? ?? 為什么格式會丟失? ??? 方案一:圖片的“格式移植”大法 ??? 實現代碼 ?? 原理解析 ?? 方案二:文本的“外科手術”大法…

學習python中離線安裝pip及下載package的方法

正常而言&#xff0c;Python 3.4及以上版本默認自帶pip工具?&#xff0c;無需額外安裝&#xff0c;如果需要單獨離線安裝pip&#xff0c;可以先使用DeepSeek查看指定操作系統能安裝的最高pip版本&#xff0c;然后在參考文獻1中現在指定版本的pip離線安裝文件&#xff0c;通常為…

liunx運維進階腳本

一、文件與目錄操作1.快速創建目錄樹mkdir -p project/{src,doc,test/{unit,integration}}創建嵌套目錄結構&#xff0c;避免逐層創建。2查找并刪除7天前的日志文件find /var/log -name "*.log" -mtime 7 -exec rm -f {} \;結合find和exec實現定時清理。3.批量重命名…

Apache Ignite 中的 SQL 模式(Schema)管理機制

這段內容講的是 Apache Ignite 中的 SQL 模式&#xff08;Schema&#xff09;管理機制。我們可以從幾個方面來理解&#xff1a; 一、什么是 Schema&#xff08;模式&#xff09;&#xff1f; 在 SQL 中&#xff0c;Schema 是數據庫對象&#xff08;如表、視圖等&#xff09;的…