P4301 [CQOI2013] 新Nim游戏
题意:给定一串数列,拿走数列中的一些数,使得剩下来的一些数的所有非空子集的异或和都不为0,且拿走的数的和要最小
类似于线性代数,如果一些元素能够异或和为0,那么说明这些元素“线性相关”,所以只要留下无关的数,那么就满足题意。
采取线性基的做法,为了使得取出的数最小,从大往小遍历这个序列,能加入就加入,不能加入就拿走
P4151 [WC2011] 最大XOR和路径
题意:给出一个边权为非负整数的无向连通图,求出一条从1号节点到N号节点的路径,使得路径上经过的边的权值的异或和最大,可以重复经过边或点
对于f(N) 任意构造一棵树,例如dfs树就行了,而w相当于图里的环,通过dfs的方式找环的w,插入线性基,最后从高位到低位,贪心地去异或。
Bipartite Checking
题意:图中的边有时出现,有时消失,求对于每个时间点,该图是不是二分图
判断二分图,利用拓展域并查集,对于动态图求并查集,利用线段树分治,将边存在的时间映射到时间线段树上,就能完成一步一步添加边,利用栈存储过去状态,最后一步一步撤销回到原点。
P3605 [USACO17JAN] Promotion Counting P
题意:给定一棵树,求每个子树中,大于该子树父亲节点的权值的节点的数量。
线段树合并,每个节点维护权值线段树,具体做法是,先给每个节点一个初始的线段树,按照深度合并,合并中,如果主线段树某个节点空了,就把副线段树的节点给它就结束了,如果副线段树左边有就合并左边,右边有就合并右边,最后左右都没有,就说明到了l==r的情况,相加一下就行,记得最后要update或者pushup节点的值