題目大意:給定一些元素,每個元素有兩個值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<