首页 > TAG信息列表 > 01trie

Xor-MST (最小异或生成树 贪心 01Trie) [2022.7.22]

Xor-MST 题面翻译 给定 \(n\) 个结点的无向完全图。每个点有一个点权为 \(a_i\)。连接 \(i\) 号结点和 \(j\) 号结点的边的边权为 \(a_i\oplus a_j\)。 求这个图的 MST 的权值。 \(1\le n\le 2\times 10^5\),\(0\le a_i< 2^{30}\)。 题目描述 You are given a complete undirecte

【题解】P4592 [TJOI2018]异或(可持久化 01Trie,LCA,倍增)

【题解】P4592 [TJOI2018]异或 题目链接 P4592 [TJOI2018]异或 - 洛谷 题意概述 现在有一颗以 \(1\) 为根节点的由 \(n\) 个节点组成的树,节点从 \(1\) 至 \(n\) 编号。树上每个节点上都有一个权值 \(v_i\)。现在有 \(q\) 次操作,操作如下: \(1~x~z\):查询节点 \(x\) 

CF842D题解

题目描述 给你一个长度为 \(n(n\leq 3e5)\) 整数数列,对于每一次询问,我们将序列中每一个元素都异或上一个数字 \(x\) 然后查询序列 \(mex\) ,其中 \(mex\) 定义为最小没有出现的自然数。 分析 我们先想想如何快速求一个序列的 \(mex\) ,一种可能很常见的方法是建立一颗权值线段树,然后

Codeforces 1511G - Chips on a Board(01trie/倍增)

Codeforces 题面传送门 & 洛谷题面传送门 一道名副其实的 hot tea 首先显然可以发现这俩人在玩 Nim 游戏,因此对于一个 \(c_i\in[l,r]\) 其 SG 值就是 \(c_i-l\),最终游戏的 SG 值就是 \(\oplus_{c_i\in[l,r]}(c_i-l)\),如果该值为 \(0\) 答案就是 B,否则答案是 A。 从这一步开始就有

CF817E Choosing The Commander(01Trie)

// Problem: CF817E Choosing The Commander // Contest: Luogu // URL: https://www.luogu.com.cn/problem/CF817E // Memory Limit: 250 MB // Time Limit: 2000 ms // // Powered by CP Editor (https://cpeditor.org) #include<bits/stdc++.h> using namespace st

洛谷P4551 最长异或路径(01Trie)

题目描述 给定一棵nn个点的带权树,结点下标从11开始到NN。寻找树中找两个结点,求最长的异或路径。 异或路径指的是指两个结点之间唯一路径上的所有边权的异或。 输入格式 第一行一个整数NN,表示点数。 接下来 n−1n−1 行,给出 u,v,wu,v,w ,分别表示树上的 uu 点和 vv 点有连边,边的权值

[COCI2019-2020#4] Klasika 题解

题目传送门 题目分析 约定树节点数量为 \(n\)。 由于在线做法维护信息较为困难,因此使用离线做法,先将树建出来再依次处理操作。 考虑如何维护两点间的异或路径和。 比较套路的方法是维护每个点 \(i\) 到根的异或路径和 \(dis_i\),那么点 \(a\) 到点 \(b\) 的异或路径和即为 \(dis_a

记一个01Trie板子

#include <bits/stdc++.h> using namespace std; const int N = 1e4 + 20; int son[N * 31][2], cnt[N * 31]; int idx; void insert(int x) { int p = 0; for(int i = 30; i >= 0; -- i) { int u = x >> i & 1; if(!son[p][u]) son[p][u] = ++

[FJOI2015]火星商店问题(线段树分治+可持久化01trie树)

题目:洛谷P4585 题目描述: 有\(n\)个商店,每个商店初始都有一种特殊物品,你可以在任意时间购买,在某个时间点会出现某种物品可以在某种商店中购买,所有的物品都有一个价格\(val\),每种物品都有无限多个 多个询问,每个询问为在当前那个时间点,询问一个\((l,r,x,d)\),必须购买且仅能购买一件物

01trie

作为第一个字符串数据结构,01trie并没有想象的那么难 过程用迭代比递归更好 01trie的主体是在一颗完美二叉树上访问,根据当前位0/1来决定去哪颗子树 同时,还有一个很好的性质,同一个节点只能保存一个数,可以多次 这样就不可能有重复发生 用来做异或有关的特别好,或许还可以代替平衡树? ​

模拟测试20190918

诶这次考得其实挺炸的诶 然而结果还行? 莫不是前几次考得太炸导致$ rp++? $ 上来看$ T1 $成功理解错题意 想不到正确复杂度的做法所以只能打暴力 打了个$ n^{2} $的暴力然而他A了? yyT2了1h然而无果 看T3,先打了个普通$ O(nlogn*2^{m}) $的暴力 然后又改了个01trie的$ O(nlogn*2^{m})

01Trie学习笔记

\(01Trie\)学习笔记 前置知识: \(Trie\)树 \(xor\)的一些性质 \(xor\)对于\(0\)和\(1\),两个数相同返回\(0\),不同返回\(1\) 所以我们可以得到一些很有意思的结论 \[0\ xor\ 1\ =\ 1\] \[1\ xor\ 1\ =\ 0\] \[p\ xor\ p\ =\ 0\] \[p\ xor\ 0\ =\ p\] 根据第\(1\)和\(2\)条我们可

bzoj 4137 [FJOI2015]火星商店问题——线段树分治+可持久化01trie树

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4137 关于可持久化01trie树:https://www.cnblogs.com/LadyLex/p/7281110.html 看了看它的两道例题,就没写。 特殊商品可以直接用可持久化trie做。 其他部分用线段树分治。修改是单点的,询问是区间,原来想的是把询问区间定位后有

洛谷P3369 【模板】普通平衡树 01trie/骚操作

Code: #include <cstdio> #include <algorithm> #include <cstring> #define setIO(s) freopen(s".in","r",stdin) #define maxn 100010 * 33 using namespace std; int root=1,tot=1,sumv[maxn],n,opt,x,ch[maxn][2]; void ins(int

2019.01.13 bzoj4137: [FJOI2015]火星商店问题(线段树分治+可持久化01trie)

传送门 题意:序列上有nnn个商店,有两种事件会发生: sss商店上进购标价为vvv的一个物品 求编号为[l,r][l,r][l,r]之间的位置买ddd天内新进购的所有物品与一个数xxx异或值的最大值。 每个位置都有一种物品每天会新进购(最开始会给出)。 思路: 第一眼显然的线段树套可持久化01trie