【BZOJ2460】元素(贪心,线性基)

题面

BZOJ

Description

相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔

法矿石炼制法杖的技术。那时人们就认识到,一个法杖的法力取决于使用的矿石。

一般地,矿石越多则法力越强,但物极必反:有时,人们为了获取更强的法力而

使用了很多矿石,却在炼制过程中发现魔法矿石全部消失了,从而无法炼制

出法杖,这个现象被称为“魔法抵消” 。特别地,如果在炼制过程中使用超过

一块同一种矿石,那么一定会发生“魔法抵消”。

后来,随着人们认知水平的提高,这个现象得到了很好的解释。经过了大量

的实验后,著名法师 Dmitri 发现:如果给现在发现的每一种矿石进行合理的编

号(编号为正整数,称为该矿石的元素序号),那么,一个矿石组合会产生“魔

法抵消”当且仅当存在一个非空子集,那些矿石的元素序号按位异或起来

为零。 (如果你不清楚什么是异或,请参见下一页的名词解释。 )例如,使用两

个同样的矿石必将发生“魔法抵消”,因为这两种矿石的元素序号相同,异或起

来为零。

并且人们有了测定魔力的有效途径,已经知道了:合成出来的法杖的魔力

等于每一种矿石的法力之和。人们已经测定了现今发现的所有矿石的法力值,

并且通过实验推算出每一种矿石的元素序号。

现在,给定你以上的矿石信息,请你来计算一下当时可以炼制出的法杖最多

有多大的魔力。

Input

第一行包含一个正整数N,表示矿石的种类数。

接下来 N行,每行两个正整数Numberi 和 Magici,表示这种矿石的元素序号

和魔力值。

Output

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

Sample Input

3

1 10

2 20

3 30

Sample Output

50

HINT

由于有“魔法抵消”这一事实,每一种矿石最多使用一块。

如果使用全部三种矿石,由于三者的元素序号异或起来:1 xor 2 xor 3 = 0 ,

则会发生魔法抵消,得不到法杖。

可以发现,最佳方案是选择后两种矿石,法力为 20+30=50。

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

,Magici ≤ 10^4

。

题解

如何避免产生一个异或和为\(0\)的子集出现?

这个可以用线性基来维护

又因为要答案最大化

所以按照第二维排序

第一维如果在线性基中存在过

就不产生贡献

最后知己累加

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define ll long long
#define RG register
#define MAX 2000
inline ll read()
{
RG ll x=0,t=1;RG char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=-1,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return x*t;
}
int n,ans;
struct xxj
{
ll p[60];
ll insert(ll x)
{
for(int i=59;i>=0;--i)
{
if(~x&(1ll<<i))continue;
if(!p[i]){p[i]=x;break;}
x^=p[i];
}
return x;
}
}G;
struct Node{ll x;int v;}a[MAX];
bool cmp(Node a,Node b){return a.v>b.v;}
int main()
{
n=read();
for(int i=1;i<=n;++i)a[i].x=read(),a[i].v=read();
sort(&a[1],&a[n+1],cmp);
for(int i=1;i<=n;++i)
if(G.insert(a[i].x))
ans+=a[i].v;
printf("%d\n",ans);
return 0;
}

【BZOJ2460】元素(贪心,线性基)的更多相关文章

  1. BZOJ2460:[BJWC2011]元素(贪心,线性基)

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

  2. bzoj2460元素(线性基,贪心)

    题目大意: 给定\(n\)个二元组\((a,b)\),求一个最大的\(\sum b\)的集合,满足这个集合的任意子集的\(a\)的\(xor\)值不为0 这道题需要一个线性基的性质: 线性基的任何非空 ...

  3. [BeiJing2011]元素[贪心+线性基]

    2460: [BeiJing2011]元素 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1245  Solved: 652[Submit][Stat ...

  4. BZOJ 2460 元素(贪心+线性基)

    显然线性基可以满足题目中给出的条件.关键是如何使得魔力最大. 贪心策略是按魔力排序,将编号依次加入线性基,一个数如果和之前的一些数异或和为0就跳过他. 因为如果要把这个数放进去,那就要把之前的某个数拿 ...

  5. BZOJ_2460_[BeiJing2011]元素_线性基

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

  6. BZOJ2460 Beijing2011元素(线性基+贪心)

    按价值从大到小考虑每个元素,维护一个线性基,如果向其中加入该元素的编号仍然构成线性基,则将其加入. 不会证明.当做线性基的一个性质吧. #include<iostream> #includ ...

  7. BZOJ - 2460 :元素 (贪心&线性基)

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

  8. BZOJ2460 [BeiJing2011]元素 【线性基】

    2460: [BeiJing2011]元素 Time Limit: 20 Sec  Memory Limit: 128 MB Submit: 1675  Solved: 869 [Submit][St ...

  9. BZOJ 2460:元素(贪心+线性基)

    题目链接 题意 中文题意 思路 线性基学习 题目要求选价值最大的并且这些数异或后不为0,可以考虑线性基的性质:线性基的任意一个非空集合XOR之和不会为0.那么就可以贪心地对价值从大到小排序,加入线性基 ...

  10. 【题解】 bzoj2460: [BeiJing2011]元素 (线性基)

    bzoj2460,戳我戳我 Solution: 线性基板子,没啥好说的,注意long long 就好了 Code: //It is coded by Ning_Mew on 5.29 #include ...

随机推荐

  1. 高能福利 |"荐"者有份,有"福"同享

    WeTest 导读 越来越多的开发者加入WeTest大家庭了,感谢大家一直以来的支持,WeTest又有新一步“大福利”赠送了! 即日起,参加WeTest用户推荐有礼活动,推荐者和被推荐者皆可获得福利. ...

  2. JS基础,课堂作业,成绩练习

    成绩练习 <script> var name = prompt("请输入学生姓名:"); var degree = parseInt(prompt("请输入学 ...

  3. NTP(Network Time Protocol)

    Linux NTP配置详解 (Network Time Protocol) http://www.ntp.org/ Meinberg NTP packages provide a GUI instal ...

  4. 180719-Quick-Task 动态脚本支持框架之使用介绍篇

    文章链接:https://liuyueyi.github.io/hexblog/2018/07/19/180719-Quick-Task-动态脚本支持框架之使用介绍篇/ Quick-Task 动态脚本 ...

  5. 常用SQL语句大全(SQL Server)

    一.基础       查看数据库状态 select state_desc from sys.databases where name='dbname'  -- dbname数据库名 1.说明:创建数据 ...

  6. SteamVR Unity Plugin - v2.0.1中的InteractionSystem

    最近写VR项目的时候用到了SteamVR Unity Plugin - v2.0.1插件,感觉比之前用到的SteamVR plugin for Unity - v1.2.2版本改进了很多,就算不用VR ...

  7. Linux 配置网络连接

    在VMware里,依次点击”编辑“ - ”虚拟网络编辑器“,如下图,我选择的是NAT模式: 在这个界面接着点"NAT设置",查看虚拟机的网关,这个网关在第三步要用.我这里的网关是1 ...

  8. AppCan 之初体验

    平台概述 什么是AppCan 移步这里,楼主的一句话:可以匹敌 Phonegap .Titanium .Sencha Touch .MUI .ImagApp.Nitrous .apicloud .起步 ...

  9. Knight Moves(广搜BFS)

    Description A friend of you is doing research on the Traveling Knight Problem (TKP) where you are to ...

  10. lintcode-496-玩具工厂

    496-玩具工厂 工厂模式是一种常见的设计模式.请实现一个玩具工厂 ToyFactory 用来产生不同的玩具类.可以假设只有猫和狗两种玩具. 您在真实的面试中是否遇到过这个题? Yes 样例 ToyF ...