题目大意:给定一些元素,每个元素有两个值a和b,现在需要选出一些元素,在不存在a值异或和为0的子集的情况下使b之和最大
可以用拟阵证明贪心的正确性(我不会证,同学会)
于是我们将b值排序,从大到小插入
动态维护线性基即可
#include#include #include #include #define M 1010 using namespace std; struct abcd{ long long a; int b; friend istream& operator >> (istream& _,abcd &x) { _>>x.a>>x.b; return _; } bool operator < (const abcd &x) const { return b > x.b ; } }a[M]; int n; long long ans,linear_bases[70]; int main() { int i,j; cin>>n; for(i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+n+1); for(i=1;i<=n;i++) { for(j=62;~j;j--) if(a[i].a&(1ll<