zcmimi's blog
avatar
zc
2020-06-01 19:50:00
  • 本文总阅读量
查看原题

点击跳转

先按魔法值排序,然后按顺序插入,如果不能被当前集合异或出来,那么插入并加上其贡献

#include<bits/stdc++.h>
typedef long long ll;
const int N=1001;
int n,ans=0;
ll p[61];
struct node{
    int v;ll x;
    bool operator<(node t){return v>t.v;}
}a[N];
void ins(ll x,int v){
    for(int i=60;~i;--i)if(x>>i){
        if(!p[i]){
            p[i]=x,ans+=v;
            return;
        }
        x^=p[i];
    }
}
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
        scanf("%lld%d",&a[i].x,&a[i].v);
    std::sort(a+1,a+n+1);
    for(int i=1;i<=n;++i)ins(a[i].x,a[i].v);
    printf("%d\n",ans);
}
LG 4570 [BJWC2011]元素
comment评论
Search
search