luogu4570 元素
problem
有\(n\)个二元组, \((x,y)\),要选出一些二元组,使得他们的\(x\)的任何一个子集的异或和不为\(0\)并且\(y\)的和最大。
solution
考虑是\(x\)的子集异或和不为0这个条件。如果他有一个子集异或和为\(0\),那么就说明其中有一个数字可以由其他的数字异或得到。所以就是要找出他的线性基。使得线性基中的元素的\(y\)之和最大。
考虑线性基的一个性质:
线性基的数量是一定的,即如果往原线性基中添加一个元素。那么也要删除恰好一个元素。
证明:
如果首先证明删除最多一个元素。这个根据线性基的定义就可以知道。线性基是可以得到原数组中所有异或和的一个最小子集,所以如果删除了多于一个元素。那么线性基肯定就不能得到原数组的所有异或和了。
然后证明至少删除一个元素。如果不删除的话。原线性基没有加入这个元素,肯定是这个元素可以被其他元素异或得到。现在将它加进去但是不删除元素。就不符合线性基定义了。
所以对于这个题,我们优先加入\(y\)值大的。所以按照\(y\)排个序然后求线性基即可。
code
/*
* @Author: wxyww
* @Date: 2019-07-23 10:11:07
* @Last Modified time: 2019-07-23 10:25:42
*/
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector>
#include<ctime>
using namespace std;
typedef long long ll;
const int N = 1010;
#define pi pair<int,ll>
ll read() {
ll x=0,f=1;char c=getchar();
while(c<'0'||c>'9') {
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9') {
x=x*10+c-'0';
c=getchar();
}
return x*f;
}
pi a[N];
bool cmp(pi x,pi y) {
return x.first > y.first;
}
ll p[N],ans;
int main() {
int n = read();
for(int i = 1;i <= n;++i) {
a[i].second = read();a[i].first = read();
}
sort(a + 1,a + n + 1,cmp);
for(int i = 1;i <= n;++i) {
ll x = a[i].second;
for(int j = 63;j >= 0;--j) {
if(!(x & (1ll << j))) continue;
if(!p[j]) {
p[j] = x;ans += a[i].first;break;
}
x ^= p[j];
}
}
cout<<ans<<endl;
return 0;
}
luogu4570 元素的更多相关文章
- 读书笔记:《HTML5开发手册》--HTML5新的结构元素
读书笔记:<HTML5开发手册> (HTML5 Developer's CookBook) 虽然从事前端开发已有很长一段时间,对HTML5标签也有使用,但在语义化上面理解还不够清晰.之前在 ...
- 【CSS进阶】伪元素的妙用--单标签之美
最近在研读 <CSS SECRET>(CSS揭秘)这本大作,对 CSS 有了更深层次的理解,折腾了下面这个项目: CSS3奇思妙想 -- Demo (请用 Chrome 浏览器打开,非常值 ...
- HTML kbd键盘元素
1. 说明 kbd :即Keyboard Input Element(键盘输入元素).表示键盘按键的语义元素,常用于网页上对快捷键.按键说明的场景. 样式规格:内联样式. 为了在页面上突出显示,可以给 ...
- CSS HTML元素布局及Display属性
本篇文章主要介绍HTML的内联元素.块级元素的分类与布局,以及dispaly属性对布局的影响. 目录 1. HTML 元素分类:介绍内联元素.块级元素的分类. 2. HTML 元素布局:介绍内联元素. ...
- HTML5 语义元素(一)页面结构
本篇主要介绍HTML5增加的语义元素中关于页面结构方面的,包含: <article>.<aside>.<figure>.<figcaption>.< ...
- HTML5 语义元素(二)文本内容
上一篇介绍的是关于页面结构方面的语义元素,本篇介绍文本内容方面,包含:<bdi>.<details>.<summary>.<mark>.<outp ...
- HTML5 input元素新的特性
在HTML5中,<input>元素增加了许多新的属性.方法及控件.本文章分别对这三方面进行介绍. 目录 1. 属性 2. 方法 3. 新控件 1. 属性 <input>元素在H ...
- HTML块级元素
前面的话 在HTML5出现之前,人们一般把元素分为块级.内联和内联块元素.本文将详细介绍HTML块级元素 h 标题(Heading)元素有六个不同的级别,<h1>是最高级的,而&l ...
- JavaScript动画-拖拽改变元素大小
▓▓▓▓▓▓ 大致介绍 拖拽改变元素大小是在模拟拖拽上增加了一些功能 效果:拖拽改变元素大小 ▓▓▓▓▓▓ 拖拽改变元素大小原理 首先这个方块得知道我们想要改变这个它的大小,所以我给它设定一个范围,当 ...
随机推荐
- dicom(dcm)文件批量Study Instance UID打包整理工具
一款可以自动识别原始dicom文件Study Instance UID的工具. 如果你有一堆混乱不堪的dcm文件,这个小工具能帮助你将这些无序的dicom文件按照Study Instance UID压 ...
- IT兄弟连 Java语法教程 流程控制语句 分支结构语句2
2 if-else条件语句 if-else语句的完整形式如下: if(判断条件){ A代码块(判断条件的值为true,执行) }else{ B代码块(判断条件的值为false,执行) } 当然,如果 ...
- html背景音乐
标签<audio> 参用属性 autoplay="autoplay"自动播放 controls="controls",在页面内显示显示控件,如播放按 ...
- 用go-module作为包管理器搭建go的web服务器
本篇博客主要介绍了如何从零开始,使用Go Module作为依赖管理,基于Gin来一步一步搭建Go的Web服务器.并使用Endless来使服务器平滑重启,使用Swagger来自动生成Api文档. 源码在 ...
- 全栈工程师对Python面试中is和==区别的详细解说!看完真的学到了!
面试实习生的时候,当问到 is 和 == 的区别时,很多同学都答不上来,搞不清两者什么时候返回一致,什么时候返回不一致.本文我们来看一下这两者的区别. 我们先来看几个例子: a = "hel ...
- python验证码识别(2)极验滑动验证码识别
目录 一:极验滑动验证码简介 二:极验滑动验证码识别思路 三:极验验证码识别 一:极验滑动验证码简介 近些年来出现了一些新型验证码,不想旧的验证码对人类不友好,但是这种验证码对于代码来说识别难度上 ...
- JDK内置工具命令
javap Java反编译工具,主要用于根据Java字节码文件反汇编为Java源代码文件用法:javap 用法 描述 javap -help —help -? 输出此用法消息 javap -versi ...
- /etc/profile和~/.bash_profile等文件的区别和联系
对比说明:/etc/profile:为系统的每个用户设置环境信息和启动程序,当用户第一次登录时,该文件被执行,其配置对所有登录的用户都有效.当被修改时,必须重启才会生效.英文描述:”System wi ...
- Linux下正确修改Docker镜像和容器的默认存储位置,亲测有效
我们通过 yum 的方式安装完Docker环境后,它默认的存储位置是 /var/lib/docker,默认的 pid 存放位置是 /var/run/docker.pid. 如果仅仅是做测试,我们可能没 ...
- QML::常用属性
Item 属性: Item 类型比较特殊,因为它是所有其他可视化类型的基类型. Qt Quick中所有可视化类型都基于 Item. Item 对象本身没有一个可视化的外观,但是它定义了可视化项目中所有 ...