当前位置: 首页 > news >正文

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.lryc.cn/news/309072.html

相关文章:

  • JavaScript 基本数据类型的详解
  • DDR5内存相比DDR4内存的优势和区别?选择哪一个服务器内存配置能避免丢包和延迟高?
  • 篮球游戏中的挑战精神与怄气心理:扣篮被帽后的再度冲击
  • JavaScript高级程序设计
  • 初阶数据结构:栈与队列
  • Houdini学习笔记
  • 电销机器人识别客户情绪状态
  • AI推介-大语言模型LLMs论文速览(arXiv方向):2024.02.25-2024.03.01
  • Cesium插件系列——3dtiles压平
  • APS面试审核准备的常规问题
  • jvm 基础知识和jvm 调优
  • USB4之ASM2464PD与ASM2464PDX兼容与运用
  • python笔记_进制
  • 面试数据库篇(mysql)- 05什么是聚簇索引什么是非聚簇索引
  • 如何开好一家汽车美容店,汽车美容保养与装饰教学
  • Taro + node.js 注册 仿照java 中的加盐算法
  • 全量知识系统问题及SmartChat给出的答复 之9 三套工具之4语法解析器 之2
  • 简洁版用户登录系统
  • Android 监听网络状态变化
  • 【LeetCode】一周中的第几天+ 一年中的第几天
  • 深度学习 精选笔记(10)简单案例:房价预测
  • DBGridEh 的排序
  • spring-boot-starter-parent和spring-boot-dependencies介绍
  • 缓存穿透解决方案之布隆过滤器
  • pptx和ppt有什么区别?了解两者之间的微妙差异
  • LabVIEW水下温盐深数据一体化采集与分析
  • 适配器模式 详解 设计模式
  • 探索rsync远程同步和SSH免密登录的奥秘
  • JavaScript new、apply call 方法
  • 助力智能化农田作物除草,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建农田作物场景下玉米苗、杂草检测识别分析系统