【CF888G】Xor-MST(生成树 Trie)】的更多相关文章

题目链接 大意 给出\(N\)个点的点权,定义两个点之间的边权为这两个点权的异或和,求这\(N\)个点间的最小生成树. 思路 贪心地想,相连的两个点异或和应当尽量的小. 那么应先从高位确定,因为高位的大小比低位大,所以高位间的连边首先要尽量小. 考虑对于某一数位怎么做: 首先将这一位的数字全部抽出来,变成一个01串. 明显0应先和0连,1应先和1连,最后留出一条0和1间的连边要尽量小. 那么全0和全1的部分就又可以分治到下一个数位去了. 考虑0和1间的连边怎么做: 那么我们对于0和1中的某个集合…
题目链接 \(Description\) 有一张\(n\)个点的完全图,每个点的权值为\(a_i\),两个点之间的边权为\(a_i\ xor\ a_j\).求该图的最小生成树. \(n\leq2*10^5,0\leq ai<2^{30}\). \(Solution\) 代码好神啊. 依旧是从高到低考虑每一位.对于当前位i,如果所有点在这一位都为0或1,不需要管(任何边在这一位都为0). 否则可以把点分为两个集合,即i位为0和1的集合,这两个集合间必须存在一条边,且边权这一位只能为1. 考虑怎么高…
题意:给你一个序列(n<=100000),求出一个连续的子序列[i,j]使得ai xor ai+1 xor…… xor aj最大,求出这个最大值(其中每个数<=2^21) 分析:题目和求一段子序列的和或者积很像,只是运算法则改变,所以可以往求子段和.积的方法上面考虑 首先如果设sum[i]=a1 xor a2 xor a3……xor ai,则子序列[i,j]的xor值可以表达为sum[j] xor sum[i-1],这样是O(n^2)的是不行的 有以往的处理经验我们知道,后面那个j一定要枚举的…
我的脑回路可能比较奇怪. 我们对这些询问离线,将所得序列${a}$的后缀和建$n$棵可持久化$trie$. 对于一组询问$(l,r,x)$,我们在主席树上询问第$l$棵树$-$第r$+1$棵树中与$suma[n']\ xor\ x$异或的最大值即可. 这个时间复杂度是$O(n\ log\ a)$的. #include<bits/stdc++.h> #define M 600005 using namespace std; ],sum=;}a[M*]; },use=; void updata(i…
描述 在给定的N个整数A1,A2--AN中选出两个进行xor运算,得到的结果最大是多少? 输入格式 第一行一个整数N,第二行N个整数A1-AN. 输出格式 一个整数表示答案. 样例输入 3 1 2 3 样例输出 3 数据范围与约定 对于100%的数据: N<=\(10^5\), 0<=Ai<\(2^{31}\). 题解 看到\(A_i\)最大为\(2^{31}\)很容易想到把数字拆成一个一个数位存进字典树,而为了异或值最大,我们可以想到一个贪心,在求一个数字\(A_i\)与另一个数字\(…
题目大意: 长度为\(n\)的数组A.求对于所有数对\((i,j)(i \in [1,n],j \in [1,n])\),\(lowbit(A_i xor A_j)\)之和.答案对998244353取模 定义lowbit(0)=0 题解: 官方题解给出的Trie的做法... 但是我有一个分治的做法: 我们从低到高枚举二进制位: 在每个二进制位枚举时,将所有的数按照这一二进制位为0或为1分成两组 这样一共有两组的siz的乘积对的数在这一位上对答案做出贡献 由于我们发现以后这两组数间不可能存在一组数…
Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others)Total Submission(s): 3647    Accepted Submission(s): 1595 Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Ze…
题意: 给出一个长度为n的数组C,回答m个形式为(L, R, A, B)的询问, 含义为存在多少个不同的数组下标k属于[L, R]满足C[k] XOR A >= B(式中XOR为异或运算). T组测试数据. 每组第一行为两个整数n, m.(1 <= n, m <= 5e4). 第二行n个整数表示数组C.(0 <= C[i] <= 1e9). 接下来m行,第i行四个整数L[i], R[i], A[i], B[i](1 <= L[i] <= R[i] <= n,…
http://acm.hdu.edu.cn/showproblem.php?pid=4825 题意:给出N个数,M个询问,每个询问给出一个X,问在这N个数中哪个数和X异或后结果最大. 思路:可以用Trie构造出sigmaSize为0和1的点,先将N个数插入Trie,然后询问在Trie上尽量找可以不同的数,不同的话异或起来是最大的. #include <cstdio> #include <algorithm> #include <iostream> #include &l…
题意:求一段连续的数字使得它们的异或和最大. 思路:首先利用前缀和求sum[i],这样求某段连续数字异或和最大就是求某两个j和i满足sum[i]^sum[j-1]最大,问题就变成了找两个数的异或最大.这个问题可以利用tire树完成.首先将空串加入树,即sum[0].然后枚举i,对于sum[i]先取反,再在tire树上贪心的找可以匹配到的字符串,具体地说就是找高位尽量相同的.找到以后更新答案,再将sum[i]插入到trie树上. 注意一个问题就是trie树空间要开的足够大. #include<cs…
BZOJ LOJ 洛谷 惊了,18年了还有省选出模板题吗= = 做这题就是练模板的,我就知道我忘的差不多了 询问一就用以DFS序为前缀得到的可持久化Trie做,询问二很经典的树上差分. 注意求询问二的时候,为了方便就先算一下LCA的答案. //83472kb 3316ms #include <cstdio> #include <cctype> #include <algorithm> #define BIT 29 #define gc() getchar() #defi…
可持久化Trie模板题. 建两种可持久化Trie,每个点两棵,一棵对DFS求前缀和,一棵对祖先求前缀和. 或者树剖,不好写多少还多个log. #include<cstdio> #include<algorithm> #define rep(i,l,r) for (int i=(l); i<=(r); i++) #define For(i,x) for (int i=h[x],k; i; i=nxt[i]) using namespace std; ; ]; ],nxt[N&l…
题意 题目链接 给出\(n\)点,每个点有一个点权\(a[i]\),相邻两点之间的边权为\(a[i] \oplus a[j]\),求最小生成树的值 Sol 非常interesting的一道题,我做过两种这类题目,一种是直接打表找规律,另一种就像这种用Boruvka算法加一些骚操作来搞. 首先,把所有元素扔到Trie树里面,这样对于Trie树上的每一层(对应元素中的每一位)共有两种情况: 全为0或全为1 一部分为0另一部分为1 对于第一种情况,我们无需考虑,因为任意点相邻产生的贡献都是0,对于第二…
Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Zeus 发起M次询问,每次询问中包含一个正整数 S ,之后 Zeus 需要在集合当中找出一个正整数 K ,使得 K 与 S 的异或结果最大.Prometheus 为了让 Zeus 看到人类的伟大,随即同意 Zeus 可以向人类求助.你能证明人类的智慧么?   Input 输入包含若干组测试数据,每组测试…
强行把序列问题放树上,好无聊啊~ code: #include <bits/stdc++.h> #define N 200005 #define setIO(s) freopen(s".in","r",stdin) using namespace std; int tot,edges,tim; int cnt[N*33],ch[N*33][2],tree[N],seq[N],val[N],ba[N]; int fa[N],son[N],size[N],t…
题目描述 求一棵带边权的树的一条最大 Xor 路径的值.这里的"路径"不一定从根到叶子结点,中间一段路径只要满足条件也可以. 输入格式 第一行,一个整数 N ,表示一颗树有 N 个节点,接下来 N-1 行,每行三个整数 a,b,c 表示节点 a 和节点 b 之间有条权值为 c 的边. 输出格式 输出仅一行,即所求的最大值. 样例数据 1 输入 [复制] 4 1 2 3 1 3 4 1 4 7 输出 7 备注 [数据范围] 对 40% 的输入数据 :数据退化为一条链: 另对 10% 的输…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5536 题目大意是给了一个序列,求(si+sj)^sk的最大值. 首先n有1000,暴力理论上是不行的. 此外题目中说大数据只有10组,小数据最多n只有100.(那么c*n^2的复杂度应该差不多) 于是可以考虑枚举i和j,然后匹配k. 于是可以先把所有s[k]全部存进一个字典树, 然后枚举s[i]和s[j],由于i.j.k互不相等,于是先从字典树里面删掉s[i]和s[j],然后对s[i]+s[j]这个…
题目链接:http://poj.org/problem?id=3764 题目大意是在树上求一条路径,使得xor和最大. 由于是在树上,所以两个结点之间应有唯一路径. 而xor(u, v) = xor(0, u)^xor(0, v). 所以如果预处理出0结点到所有结点的xor路径和,问题就转换成了求n个数中取出两个数,使得xor最大. 这个之前用字典树处理过类似问题. 代码: #include <iostream> #include <cstdio> #include <cst…
本章关于企业网络的最底层--交换层,难度较低,主要为以后三层的路由做铺垫.所有笔记的分类顺序为:序章→交换层→路由层→运营商,体现了从企业网到互联网的学习顺序. 注:思科设备命令行通常不分大小写!以后不再赘述. 一.交换机工作原理 1. 数据格式:帧/分组/段头/负载/帧尾 2. 数据传输方式 单播 unicast 广播 broadcast 3.集线器工作原理 特点:信号放大.泛洪 4.交换机原理 Mac地址表:每个接口一个本地mac,接口接收的数据源mac与接口关联. 交换机收到一个未知目的m…
一.实验目标 掌握MSTP多生成树配置,VLAN配置,trunk配置,etherchannel配置 二.实验平台 系统:WIN7以上windows,X64版本.CPU支持虚拟化,并在BIOS中开启虚拟化.内存最好3G以上. 软件:GNS3 1.4.0b3, VMware Workstation Pro 12,VM虚拟机:GNS3 VM (GNS3:1.4.0b3,VM:0.9.6) , IOU: i86bi-linux-l2-adventerprisek9-15.1a.bin 三.实验拓扑 四.…
▶ 书中第四章部分程序,包括在加上自己补充的代码,两种 Prim 算法求最小生成树 ● 简单 Prim 算法求最小生成树 package package01; import edu.princeton.cs.algs4.In; import edu.princeton.cs.algs4.StdOut; import edu.princeton.cs.algs4.Edge; import edu.princeton.cs.algs4.EdgeWeightedGraph; import edu.pr…
生活还得继续 bzoj3771 题面让我笑了很长时间 给出 n个物品,价值为别为Xi且各不相同,现在可以取1个.2个或3个,问每种价值和有几种情况? *顺序不同算一种 很傻逼的一个母函数+容斥,用A(x)表示每种取一个的母函数,B(x)表示每种取两个,C(x)表示每种取三个 显然所以对于每种物品价值Xi,A[xi]++,B[2*xi]++,C[3*xi]++ 然后就是 然后就是FFT啦 bzoj1101 对于给定的整数a,b和d,有多少正整数对x,y,满足x<=a,y<=b,并且gcd(x,y…
二次联通门 : LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力 /* LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力 叫做计算几何 实则毒瘤数据结构 看到xor后 考虑Trie树 Trie树的每一个节点保存的是以当前子树中每个二进制位的个数 给Trie打一个全局xor标记,如果标记这一位是1,就交换它的两个儿子 另外维护一个前缀和 前缀和存的是没sort过的值的和 Trie维护的是sort之后的值 1操作直接在前缀和后加就好…
10.08 早上和下午准备初赛,晚上考了套题,然后就摸文化课去了. \(250/250\) 手动模拟确实效果好 经验是把双刃剑,读题细致才是王道 T3是分治,一看到1e5的数据就习惯性往数据结构想,一看到XOR就想trie,太无知的我 解锁新bug: int a[i]...; 10.09 复习了一天文化课 10.10 月考螺旋丸了 10.11 填坑一天 晚上考试挖坑 \(100/120\) 好吧这次考试因聚众颓废特殊原因受了影响,但还是挂了20分,T2从\(nlog^{2}_{n}\)一步步到\…
传送门 第一次接触到Boruvka求最小生成树 它的原版本是:初始每一个点构成一个连通块,每一次找到每一个连通块到其他的连通块权值最短的边,然后合并这两个连通块.因为每一次连通块个数至少减半,所以复杂度是\(O((n+m)logn)\)的 虽然它的原版本用途不多,但是思想可以涵盖很多其他题目,比如这道题 可以想到一个做法:将所有权值插入一个\(Trie\)里,在每一个叶子节点维护到达这个节点的数的编号.像上面那样维护若干连通块,每一次计算权值最小的边时,将当前连通块中所有权值从Trie中删去,然…
题目链接 XOR 游戏 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 256    Accepted Submission(s): 86 Problem Description众所周知,度度熊喜欢XOR运算[(XOR百科)](http://baike.baidu.com/view/674171.htm). 今天,它发明了一种XOR新游戏…
之前mark下来的一道题,今天填一下坑. 题意是这样子的.给你一棵边上有权的树.然后有树上两点(u,v)的路径有n*(n-1)条,路径(u,v)的权值是边权的xor. 然后下面有m个询问,询问你n*(n-1)条路径中的第k大是多少.(k<=200000) 首先树路径的xor是一个很经典的问题,首先求出所有点i到根路径的xor值val[i].然后我们就可以发现val[u]^val[v]就是u,v路径的xor值. 然后第二个很经典的地方就是最大xor.给你一个数组,要你求数组里面xor最大的一对数.…
Cow XOR Adrian Vladu -- 2005 Farmer John is stuck with another problem while feeding his cows. All of his N (1 ≤ N ≤ 100,000) cows (numbered 1..N) are lined up in front of the barn, sorted by their rank in their social hierarchy. Cow #1 has the highe…
1295 XOR key题目来源: HackerRank基准时间限制:1.5 秒 空间限制:262144 KB 分值: 160 难度:6级算法题 给出一个长度为N的正整数数组A,再给出Q个查询,每个查询包括3个数,L, R, X (L <= R).求A[L] 至 A[R] 这R - L + 1个数中,与X 进行异或运算(Xor),得到的最大值是多少? Input 第1行:2个数N, Q中间用空格分隔,分别表示数组的长度及查询的数量(1 <= N <= 50000, 1 <= Q &…
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4825 题面: Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others)Total Submission(s): 6430    Accepted Submission(s): 2783 Problem Description Zeus 和 Prometheus 做了一个游戏,…