题目链接

线性基:https://blog.csdn.net/qq_36056315/article/details/79819714。


\(Description\)

求一组矿石,满足其下标异或和不为0,且价值和最大。

\(Solution\)

按价值从大到小依次插入线性基,这样最后得到的集合就是价值和最大的了。

贪心策略简单证明(参考:https://www.cnblogs.com/acmsong/p/7508022.html):

假设当前选取的集合\(S\)价值为\(\{v1,v2,...,vn\}\),标号为\(\{id1,id2,...,idn\}\)。所有物品中价值最大的为\(vMax\)(\(idMax\)),且当前集合中不包含\(vMax\).

那么\(vMax\)一定可以替换掉\(S\)中的某个元素,使得价值和更大。

如果不能直接插入\(vMax\),说明\(S∪\{1\}\)变得线性相关了,即\(S\)中一定存在一个子集,其下标的\(Xor\)和等于\(idMax\)。

即$$ id[x1]{\wedge}id[x2]{\wedge}...^{\wedge}id[xn]=id[Max] $$

然后\(id[Max]\)可以把任意一个元素替换掉,假设是\(x1\),那么两边同时异或\(id[Max]^{\wedge}id[x1]\):$$ id[Max]{\wedge}id[x2]{\wedge}...^{\wedge}id[xn]=id[x1] $$

这样就可以把\(id[x1]\)线性表示出来。而\(S\)中如果不加\(id[x1]\)的话是一定表示不出\(id[x1]\)的,因为\(S\)中异或和不为\(0\)(左边异或掉\(id[x1]\)是不等于\(id[x1]\)的)。

所以替换后的线性基和之前是等价的。

用拟阵能证,但是找不到啥详细的证明,我也没拿它证过啥别东西。。

x&(1ll<<i)的话别忘了1ll...


#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
typedef long long LL;
const int N=1005; LL base[69];
struct Node{
LL id; int val;
bool operator <(const Node &x)const{
return val>x.val;
}
}A[N]; inline LL read()
{
LL now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
} int main()
{
int n=read();
for(int i=1; i<=n; ++i) A[i].id=read(), A[i].val=read();
std::sort(A+1,A+1+n);
int ans=0;
for(int i=1; i<=n; ++i)
{
LL now=A[i].id;
for(int j=60; ~j; --j)
if(now&(1ll<<j))
if(base[j]) now^=base[j];
else {base[j]=now; break;}
if(now) ans+=A[i].val;
}
printf("%d\n",ans); return 0;
}

BZOJ.2460.[BeiJing2011]元素(线性基 贪心)的更多相关文章

  1. BZOJ 2460: [BeiJing2011]元素 线性基

    2460: [BeiJing2011]元素 Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法力 ...

  2. bzoj 2460 [BeiJing2011]元素 (线性基)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2460 题意: 给你一堆矿石,矿石有a,b两种性质,取任意个矿石,满足取得的这些矿石a性质异或 ...

  3. BZOJ 2460 [BeiJing2011]元素 ——线性基

    [题目分析] 线性基,由于最多有63个,只需要排序之后,动态的去维护线性基即可. [代码] #include <cstdio> #include <cstring> #incl ...

  4. BZOJ 2460 [BeiJing2011]元素(线性基模板题)

    Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法力取决于使用的矿石.一般地,矿石越多则法力越强 ...

  5. [bzoj2460] [BeiJing2011]元素(线性基+贪心)

    题目大意: 有一些矿石,每个矿石有一个a和一个b值,要求选出一些矿石,b的和最大且不存在某个矿石子集它们的a的异或和为0. 解题关键:对魔力进行由大到小排序,依次加入线性基,统计即可. #includ ...

  6. BZOJ:2460[BeiJing2011]元素 (异或基+贪心)

    2460: [BeiJing2011]元素 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 2910  Solved: 1535 题目链接:https: ...

  7. BZOJ 2460 & 洛谷 P4570 [BJWC2011]元素 (线性基 贪心)

    题目链接: 洛谷 BZOJ 题意 给定 \(n\) 个矿石,每个矿石有编号和魔力值两种属性,选择一些矿石,使得魔力值最大且编号的异或和不为 0. 思路 线性基 贪心 根据矿石的魔力值从大到小排序. 线 ...

  8. BZOJ 2460: [BeiJing2011]元素

    2460: [BeiJing2011]元素 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 878  Solved: 470[Submit][Statu ...

  9. BZOJ-6-2460: [BeiJing2011]元素-线性基

    链接 :https://www.lydsy.com/JudgeOnline/problem.php?id=2460 思路 :线性基不唯一,所以排序 进行贪心选择,价值最大的线性基, #include& ...

随机推荐

  1. UNIX环境高级编程 第14章 高级I/O

    这一章涉及很多概念和函数,包括:非阻塞I/O.记录锁.I/O复用.异步I/O.readv和writev函数以及内存映射. 非阻塞I/O 在Unix中,可以将系统调用分为两种,一种是“低速”系统调用,另 ...

  2. Java并发编程(4)--生产者与消费者模式介绍

    一.前言 这种模式在生活是最常见的,那么它的场景是什么样的呢? 下面是我假象的,假设有一个仓库,仓库有一个生产者和一个消费者,消费者过来消费的时候会检测仓库中是否有库存,如果没有了则等待生产,如果有就 ...

  3. usbnet驱动深入分析-usb虚拟网卡host端【转】

    转自:http://blog.csdn.net/zh98jm/article/details/6339320 1.驱动流程:   2.明确probe函数的功能: probe有usb core 经枚举过 ...

  4. Linux中断处理驱动程序编写【转】

    转自:http://blog.163.com/baosongliang@126/blog/static/1949357020132585316912/ 本章节我们一起来探讨一下Linux中的中断 中断 ...

  5. Linux禁止ping的俩种方法【转】

    Linux禁止ping以及开启ping的方法   Linux默认是允许Ping响应的,系统是否允许Ping由2个因素决定的:A.内核参数,B.防火墙,需要2个因素同时允许才能允许Ping,2个因素有任 ...

  6. 畸形的 dockerfile中的COPY命令-

    dockerfile中的COPY是指COPY 指定目录的“子级目录”下所有的目录和文件,到指定目录中,这个shell中的cp命令大相径庭,使得很多人纳闷,怎么cpy过去的文件不是自己想要的

  7. poj1056

    简单题 #include <iostream> #include <string> using namespace std; struct cnode { cnode *pze ...

  8. jexus linux x64[标准版] - 未集成mono 配置https

    一.找到mono安装位置 sudo find / -name mono 二.首先查看“/lib”或“/usr/lib”等系统库文件夹中是否有SSL库文件的名字,该文件名应该是“libssl.so.版本 ...

  9. liblinear和libsvm区别

    来源于知乎: 1. LibLinear是线性核,LibSVM可以扩展到非线性核(当也能用线性核,但同样在线性核条件下会比LibLinear慢很多).2. 多分类:LibLinear是one vs al ...

  10. cuowu

    ngFor不能用于Object rowspan colspan不能绑定变量,要用attr.colspan https://stackoverflow.com/questions/35615751/wh ...