题目:


给定n个矿石的编号和魔力值,让你选出一些矿石,这些矿石的id异或起来不能是0,而且总的魔力值最大,输出最大的魔力值

Input

第一行包含一个正整数N,表示矿石的种类数。
接下来 N行,每行两个正整数Numberi 和 Magici,表示这种矿石的元素序号和魔力值。

对于全部的数据:N ≤ 1000,Numberi ≤ 10^18,Magici ≤ 10^4。

Output

仅包一行,一个整数:最大的魔力值

Sample Input

3
1 10
2 20
3 30

Sample Output

50

解题思路:


看到XOR一般就要想到线性基,这里只需要用到最基础的线性基即可,不需要求异或出来的第k小的数

一般的线性基模版每当p[j]已经有数时,a[i]^=p[j],直到a[i]可以填入,这样的话实际上最后能填入的那个非零的a[i]是由多个原a[i]异或出来的。

将矿石的属性存入结构体数组中,按照魔力值从大到小排序,从魔力值大的矿石开始遍历,用其id构造行阶梯矩阵,如果可以填入(最终异或得到的a[i].id不为0),说明最初的a[i].id与之前选定的矿石中的部分矿石的a[i].id异或起来不为0,将其value值加入结果中,且整个行阶梯矩阵本身就线性无关的,异或起来非0。这样根据贪心的思想,最终结果记录的就是最大的魔力值。

ac代码:


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1000+10;
const int max_base=60;
struct node{ll id;ll value;friend bool operator <(node a,node b){return a.value>b.value;}
}a[maxn];
ll n,p[max_base+3];
ll solve()
{ll ans=0;for(int i=0;i<n;i++){for(int j=max_base;j>=0;j--){if(a[i].id>>j&1){if(p[j])a[i].id^=p[j];else{p[j]=a[i].id;break;}}}if(a[i].id)ans+=a[i].value;}return ans;
}
int main()
{scanf("%lld",&n);for(int i=0;i<n;i++)scanf("%lld %lld",&a[i].id,&a[i].value);sort(a,a+n);printf("%lld\n",solve());return 0;
}

【BZOJ2460】元素(线性基---(id,value)绑定,求id异或非0对应的最大value 和)相关推荐

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

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

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

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

  3. 【Bzoj 2460 [BeiJing2011]】——元素 线性基+贪心

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

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

    线性基: 包含最多h个数(a1, a2, a3, -, ah),其中ak如果存在,那么最高位一定是第k位 性质①:线性基中任意集合xor出来的数的值域 = 原数列任意集合xor出的数的值域 性质②:线 ...

  5. 【基础操作】线性基详解

    线性基是一个奇妙的集合(我摘的原话) 这里以非 $OI$ 的角度介绍了线性基 基础部分 模板题 给你 $n$ 个数的集合,让你选出任意多个不重复的数,使得它们的异或和最大. 线性基是什么 我们称集合 ...

  6. Codeforces 1336E Chiori and Doll Picking (子集和变换、线性基、阈值算法、状压 DP、组合计数)...

    题目链接 https://codeforces.com/contest/1336/problem/E 题解 假设线性基大小是 \(L\),其异或值域记作 \(S\),则对于异或值域内每个数,显然有 \ ...

  7. 线性代数 —— 线性基与前缀线性基

    [概述] 线性基,是线性代数中的概念,在信息学竞赛中,前缀线性基是线性基的扩展,他们主要用于处理有关异或和的极值问题. 一组线性无关的向量即可作为一组基底,张起一个线性的向量空间,这个基底即称为线性基 ...

  8. 线性基的一些基础模版

    大神博客:https://blog.csdn.net/a_forever_dream/article/details/83654397 线性基三大性质 1.原序列里面的任意一个数都可以由线性基里面的一 ...

  9. 【CodeForces 1100F】异或线性基 | 贪心 | 离线区间最大异或和 | E

    补题ing- 真的不应该错过这场比赛的 qwq 1100F. Ivan and Burgers time limit per test: 3 seconds memory limit per test ...

  10. [数学]------线性基

    线性基是什么 线性基是一个数的集合. 对于数的集合 A ,A的线性基是指,在 A 中选取任意多个数进行异或,得到的结果的值域,和 A 的线性基中数字异或的值域相同.这样对原数组元素的异或运算就可以转化 ...

最新文章

  1. VoxelNet阅读笔记
  2. php负载均衡原理_PHP超级负载均衡
  3. python读文件代码-简单了解Python读取大文件代码实例
  4. raptor五个数排序流程图_数据结构与算法(一):排序(上)
  5. Angular中父组件通过ViewChild调用子组件的方法
  6. JAVA——基于HttpComponents(HttpClient)的简单网络爬虫DEMO
  7. Android调用手机浏览器打开某网页出现异常情况
  8. 关于spring中util:/的配置
  9. Java快速提升_java快速复习 一 基础语法
  10. web服务器 apache_如何配置Apache Web服务器
  11. Java 1-Java 基础语法
  12. cocos3 动作回调函数
  13. 郁闷的.net程序员与坑爹的.net 4 client profile
  14. 企业单方调岗降薪,务工者不服离职索赔
  15. PDF转PPT怎么转?一键完成格式转换,太方便了
  16. 解决:navicat连接mysql报错10060
  17. 2021-07-09 终值定理和稳态误差【自动控制原理】
  18. 我理解的「向下兼容」
  19. 美国诚实签经验——不要插队
  20. Java猿社区—Redis一篇系列—第二章、Redis入门和安装

热门文章

  1. 因社会不公大学生找不到工作
  2. vue前期项目搭建所需要安装的插件,idea操作
  3. mysql如何进行单表的数据添加
  4. Java集合的所有知识点详解,偏通俗易懂,集合笔记
  5. python层次聚类选择类别_什么是聚类分析?聚类分析方法的类别
  6. javascript 数组操作函数
  7. 重学Es6 Promise
  8. POST数据加密问题
  9. E: List directory /var/lib/apt/lists/partial is missing. - Acquire (13: Permission denied)
  10. 生成动态代理并加入系统功能的设计模板