Educational Codeforces Round 132 (Rated for Div. 2) E. XOR Tree(啟發式合并+貪心)

題目

n(n<=2e5)個點的樹,點i權值ai(1<=ai<2^30)

修改最少的點的權值,使得樹上不存在異或和為0的簡單路徑,輸出最少的點數

權值可以被修改成任意正整數(可以是無限大)

思路來源

官方題解 & zlt題解

題解

假設樹形是固定的,dfs往上回溯的時候,

如果一條路徑xor為0,這條路徑上必須改一個值,

貪心地來看,lca必須要改

由于可以改成任意值,改lca視為把這棵子樹斷掉

XOR(u,v) = XOR(根到u)?xor?XOR(根到v)?xor?a[lca(u,v)]

那就是判一下某個點的子樹是否存在兩個點的祖先異或,等于本身的權值

這個可以啟發式合并的時候,把小的集合往大的集合上掛的時候判斷

刪除某個點,就可以認為是清空集合

心得

自己的寫法怎么寫都寫不對,都wa8,感覺是啟發式合并公有map導致的

只能抄官方題解,每個節點維護一個set了

代碼

#include<iostream>
#include<cstdio>
#include<unordered_map>
#include<set>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,ll> P;
#define fi first
#define se second
#define pb push_back
const int N=2e5+10,INF=0x3f3f3f3f,mod=1e9+7;//998244353
int n,x,y,ans;
set<int>now[N];
int a[N],sz[N];
bool ban[N];
vector<int>E[N];
void dfs(int u,int fa,int w){bool ban=0;now[u].insert(w);for(auto &v:E[u]){if(v==fa)continue;dfs(v,u,w^a[v]);if(now[u].size()<now[v].size())now[u].swap(now[v]);for(auto &x:now[v]){if(now[u].count(x^a[u])){ban=1;break;}}for(auto &x:now[v]){now[u].insert(x);}now[v].clear();}if(ban){now[u].clear();ans++;}
}
int main(){scanf("%d",&n);for(int i=1;i<=n;++i){scanf("%d",&a[i]);}for(int i=2;i<=n;++i){scanf("%d%d",&x,&y);E[x].push_back(y);//E[i].pb(P(fa,w));E[y].push_back(x);//E[i].pb(P(fa,w));}dfs(1,0,a[1]);printf("%d\n",ans);return 0;
}

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

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

相關文章

【leetcode】環形鏈表?環形鏈表II

大家好&#xff0c;我是蘇貝&#xff0c;本篇博客帶大家刷題&#xff0c;如果你覺得我寫的還不錯的話&#xff0c;可以給我一個贊&#x1f44d;嗎&#xff0c;感謝?? 目錄 1.環形鏈表解題拓展&#xff1a; 2.環形鏈表II 1.環形鏈表 點擊查看題目 解題 思路: bool hasCycle…

【算法集訓】基礎算法:基礎排序 - 插入排序

一、基本理解 插入排序(nsertion Sort)&#xff0c;一般也被稱為直接插入排序&#xff0c;是一種簡單直觀的排序算法。 **工作原理&#xff1a;**將待排列元素劃分為「已排序」和「未排序」兩部分&#xff0c;每次從「未排序的」元素中選 擇一個插入到「已排序的」元素中的正確…

劍指offer58—II 左旋轉字符串 c++

題目 字符串的左旋轉操作是把字符串前面的若干個字符轉移到字符串的尾部。請定義一個函數實現字符串左旋轉操作的功能。比如,輸入字符串"abcdefg"和數字2,該函數將返回左旋轉兩位得到的結果"cdefgab"。 示例 1: 輸入: s = “abcdefg”, k = 2 輸出: “…

MySQL 多表查詢 連接查詢 內連接

介紹 內連接查詢是兩張表中交集的部分 連接模式 隱式內連接 SELECT 字段列表 FROM 表1,表2 WHERE 條件顯式內連接 SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 連接條件案例 有兩張表一個表為學生表&#xff0c;另一個表為班級表&#xff0c;現在需要查詢學生時候在查…

接口測試(全)

&#x1f345; 視頻學習&#xff1a;文末有免費的配套視頻可觀看 &#x1f345; 關注公眾號【互聯網雜貨鋪】&#xff0c;回復 1 &#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 大多數人對于接口測試都覺得是一種高大上的測試&#xff0c;覺得…

羊大師分析,羊奶粉適合什么樣的人群喝

羊大師分析&#xff0c;羊奶粉適合什么樣的人群喝 羊奶粉適合多種人群食用&#xff0c;包括兒童、老年人、孕婦以及身體虛弱或處于疾病康復期的人群。 對于兒童來說&#xff0c;羊奶粉是一種很好的營養品。它含有豐富的蛋白質、脂肪、礦物質和維生素&#xff0c;能夠滿足兒童…

【前端素材】推薦優質后臺管理系統網頁Star admin平臺模板(附源碼)

一、需求分析 1、系統定義 后臺管理系統是一種用于管理和控制網站、應用程序或系統的管理界面。它通常被設計用來讓網站或應用程序的管理員或運營人員管理內容、用戶、數據以及其他相關功能。后臺管理系統是一種用于管理網站、應用程序或系統的工具&#xff0c;通常由管理員使…

三種圖片預覽插件viewer、vue-photo-preview、vue-picture-preview

第一種&#xff1a;viewerjs使用介紹 1、先安裝依賴 npm install v-viewer --save2、main.js內引用并注冊調用 //main.js import Viewer from ‘v-viewer’ import ‘viewerjs/dist/viewer.css’ Vue.use(Viewer); Viewer.setDefaults({ Options: { “inline”: true, “butt…

王志亮出席海爾智慧樓宇發酵行業的低碳節能解決方案

演講嘉賓&#xff1a;王志亮 食品醫藥用戶群總監 青島海爾空調電子有限公司 演講題目&#xff1a;海爾智慧樓宇在發酵行業的低碳、節能解決方案 會議簡介 “十四五”規劃中提出&#xff0c;提高工業、能源領城智能化與信息化融合&#xff0c;明確“低碳經濟”新的戰略目標&…

System Verilog學習筆記(十一)——數組(1)

System Verilog學習筆記&#xff08;十一&#xff09;——數組&#xff08;1&#xff09; 非組合型&#xff08;unpacked&#xff09; 成員之間存儲數據都是相互獨立的可以索引非組合型數組或者數組片段的能力聲明方式&#xff1a; logic [31&#xff1a;0] data [1024]; lo…

黑馬JUC筆記

黑馬JUC筆記 1.概覽 2.進程與線程 2.1 進程與線程 進程 程序由指令和數據組成&#xff0c;但這些指令要運行&#xff0c;數據要讀寫&#xff0c;就必須將指令加載至 CPU&#xff0c;數據加載至內存。在 指令運行過程中還需要用到磁盤、網絡等設備。進程就是用來加載指令、管…

Cisco Secure ACS 5.8.0.32 安裝 + Crack 教程

Cisco Secure ACS 5.8.0.32 安裝 Crack 教程 前言系統環境開始安裝 開始破解導入授權文件 前言 在ESXi 6.7 上經歷過無數次的安裝嘗試 測試了各種兼容版本都沒有安裝成功,記最后一次安裝成功的過程. 系統環境 服務器 : Dell R720xd CPU : E5-2620 v2 系統 : ESXi 6.7…

簡單控件屬性設置

1、設置文本的內容 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"…

十四、Qt主機信息與網絡編程

一、主機信息 1、主機信息接口 QHostInfo&#xff1a;獲取主機名稱和IP地址QNetWorkInterface&#xff1a;獲取主機的所有網絡接口&#xff0c;包括子網掩碼和廣播地址等 &#xff08;1&#xff09;使用 項目添加模塊QT network2、實現程序 &#xff08;1&#xff0…

【01】openEuler 源碼安裝 PostgreSQL

openEuler 源碼安裝 PostgreSQL 部署環境說明Shell 前端軟件包管理器基礎概念YUM 簡介DNF 簡介 源碼安裝 PostgreSQL環境變量&#xff08;env&#xff09;設置臨時環境變量設置永久環境變量設置 初始化數據庫&#xff08;initdb&#xff09; 數據庫基本操作數據庫基本配置&…

WiFi協議的調制技術介紹

調制技術是WiFi協議的核心部分&#xff0c;它負責將數據轉換成可以在無線信道中傳輸的信號。WiFi協議采用正交頻分復用&#xff08;OFDM&#xff09;調制技術&#xff0c;該技術通過將數據分成多個子載波進行傳輸&#xff0c;提高了信道利用率和抗干擾能力。 OFDM調制的工作原…

推特API(Twitter API)V2 用戶關注

前面章節已經介紹使用code換取Token的整個流程了&#xff0c;這里不再重復闡述了&#xff0c;下面我們獲取到用戶token以后如何幫用戶自動關注別人。需要參數關注者的用戶ID&#xff08;token授權用戶&#xff09;以及關注的目標用戶ID。用戶ID如何獲取可以看上一章節獲取用戶信…

c++結構體內存對齊

結構體內存對齊 試試運行下面的例子 #include <stdio.h> #include <stdlib.h>using namespace std;struct A{char c;int i; };struct B{char c; int i; double d; };struct C{char c;int i;double d;char c1; };int main(){printf("sizeof(A): %d\n"…

SparkStreaming在實時處理的兩個場景示例

簡介 Spark Streaming是Apache Spark生態系統中的一個組件&#xff0c;用于實時流式數據處理。它提供了類似于Spark的API&#xff0c;使開發者可以使用相似的編程模型來處理實時數據流。 Spark Streaming的工作原理是將連續的數據流劃分成小的批次&#xff0c;并將每個批次作…

適配器模式 詳解 設計模式

適配器模式 適配器模式是一種結構型設計模式&#xff0c;其主要作用是解決兩個不兼容接口之間的兼容性問題。適配器模式通過引入一個適配器來將一個類的接口轉換成客戶端所期望的另一個接口&#xff0c;從而讓原本由于接口不匹配而無法協同工作的類能夠協同工作。 結構 適配…