树上查两点间最大异或和
树倍增,每个点维护向上2^k个点的线性基,然后在查lca的时候合并
关于点权维护倍增略蛋疼-_-
合并线性基的时候就直接把一个线性基里的插到另一个里
复杂度O(m log n log^2INF)
合并的时候加点优化可以降掉一个logINF
接下来bb一些有关线性基和最大异或和的东西……
首先线性基是一个拟阵,遗传性显然,交换性可以把大的里边找一个小的里没有的位...
分类:
其他好文 时间:
2016-05-12 15:43:48
阅读次数:
195
题目大概说给一张图,每个点都有权,边的权等于其两端点权的异或和,现已知几个点的权,为了使所有边的边权和最小,其他点的权值该是多少。 很有意思的一道题,完全看不出和网络流有什么关系。 考虑每个未知的点$x$的权的二进制的第$i$位$x_i$,其对边权和的贡献为$\sum_{(x,y)\in E}(2^ ...
分类:
其他好文 时间:
2016-04-03 10:27:17
阅读次数:
222
题意:给定一棵有向图的树,有些节点上有石子,每次可以取一个石子向一个有向边移动,不能移动者负。 Ans:树上nim,叶子节点nim为0,父亲节点递归儿子得到sg值,答案就是每个石子所在点的sg值异或和。 1 #include<iostream> 2 #include<cstdio> 3 #inclu
分类:
其他好文 时间:
2016-03-11 20:32:23
阅读次数:
196
#1 第一轮是我出的。 比赛情况: #1 NanoApe 260 (写正解很不幸TLE了, 本来可以AK的) #2 swm_sxt 200 #3 czllgzmzl 170 A.candy 这道题就是个nim游戏, 我们知道当且仅当选出的各堆糖果的异或和为0时,先手必败. 这样问题转化为从N个数中选
分类:
其他好文 时间:
2016-03-05 13:14:54
阅读次数:
216
题目链接 先求每个点到根的异或和 然后就要找出两个点,使dis[a]^dis[b]最大 注意异或的性质,我们可以用trie树,沿着与当前数字每位的相反方向走 1 #include<algorithm> 2 #include<iostream> 3 #include<cstdlib> 4 #inclu
分类:
其他好文 时间:
2016-02-26 09:13:09
阅读次数:
210
设a[i]为前缀和,则i~j的异或和为a[j]^a[i],对于2个只需把另一个当成后缀就可以了 求max(a[j]^a[i])的话就用tire维护就可以了 1 #include<bits/stdc++.h> 2 #define inc(i,l,r) for(int i=l;i<=r;i++) 3 #
分类:
其他好文 时间:
2016-02-15 00:53:56
阅读次数:
230
C题意:给定n个点(标号0~n-1)的度数(就是与其邻接的点的个数)和所有与它邻接的点标号的异或和,求满足这些条件的树的边应该是怎么连的,将边输出出来这里可以理解成拓扑排序的方式考虑,当i度数为1的时候,那么我们必然知道 i 肯定得与s[i]相连使其剩余的异或值为0所以建立一个队列不断将度数变为1的...
分类:
其他好文 时间:
2016-01-27 14:20:48
阅读次数:
138
因为要求异或和最大,所以可以考虑从高位开始,向低位枚举尽可能接近~x的值,所以以二进制位为关键字,建立可持久化trie树,根据异或和的性质,XOR_SUM{i,j}=XOR_SUM{1,j} xor XOR_SUM{1,i-1},所以查询问题也可以解决了。 1 #include 2 #includ....
分类:
其他好文 时间:
2015-12-31 07:11:06
阅读次数:
577
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3261a[i]^...^a[j]=(a[1]^...^a[j])^(a[1]^...^a[i-1]) 。然后建立可持久化trie搞就可以了。#include#include#include#inc...
分类:
其他好文 时间:
2015-12-22 22:45:23
阅读次数:
277
搞成前缀和然后就可以很方便地用可持久化trie维护了.时间复杂度O((N+M)*25)-------------------------------------------------------------------------#include#include#include#includeus...
分类:
其他好文 时间:
2015-12-20 22:09:00
阅读次数:
195