zoukankan      html  css  js  c++  java
  • Luogu P4570 [BJWC2011]元素

    题目很显然就是要求序号的线性基。我们希望线性基里的权值最大,就按权值从大到小插入就行了。
    为什么是对的呢?插入线性基的一个矿石只会和另一些矿石在一个位置上冲突,而那些矿石也只能插入这一位,同时它们价值不如当前的矿石,所以这是最优的。

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    
    #define R register
    #define LL long long
    
    const int MAXN=1e3+10;
    const int MB=62;
    
    int n;
    struct Node { LL x; int y; } a[MAXN];
    inline bool cmp(Node x,Node y) { return x.y>y.y; }
    
    LL p[MB+1];
    inline int  ins(LL x) {
    	for(R int i=MB;i>=0;i--)
    		if(x&(1LL<<i)) {
    			if(!p[i]) { p[i]=x; return 1;}
    			else x^=p[i];
    		}
    	return 0;
    }
    
    int main() {
    	scanf("%d",&n);
    	for(R int i=1;i<=n;i++)
    		scanf("%lld%d",&a[i].x,&a[i].y);
    	sort(a+1,a+1+n,cmp);	
    	int ans=0;
    	for(R int i=1;i<=n;i++)
    		if(ins(a[i].x)) ans+=a[i].y;
    	printf("%d
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    SDUT_1743 最优合并问题
    并查集路径压缩方法
    java定时器
    出路在哪里?出路在于思路!
    ztree学习
    sql
    java乱码问题详解值得收藏
    js 增加删除表格的行
    java DataBaseExecutor
    java增删改查
  • 原文地址:https://www.cnblogs.com/clover4/p/12813004.html
Copyright © 2011-2022 走看看