線性基是一種特殊的基,它通常會在異或運算中出現,它的意義是:通過原集合s的某乙個最小子集s1使得s1內元素相互異或得到的值域與原集合s相互異或得到的值域相同。
性質:線性基能相互異或得到原集合的所有相互異或得到的值。
線性基是滿足性質1的最小的集合
線性基沒有異或和為0的子集。
題意:n個礦石,第i個礦石有編號num[i]和價值val[i] num[i]<=1e18,val[i]<=1e4,n<=1e3.
問從n個中選出若干個礦石,在這些礦石編號num[i]異或和不為0的情況下,其價值和最大為多少
選出子集的異或和不為0 馬上想到線性基,然後貪心將val從大到小排序後,構造線性基即可.
#include using namespace std;
typedef long long ll;
const int n=2e5+20;
const ll inf=2e16;
struct nodea[n];
bool cmp(node a,node b)
ll mk[110];
int main()
x^=mk[j];//èô×îºóx==0 ôòëµã÷x¿éòôí¨¹ýæäëûêýòì»ò³öà´.
} if(x)
ans+=a[i].val;
} cout<
BZOJ 2460 元素(貪心 線性基)
description 相傳,在遠古時期,位於西方大陸的ma gicl and 上,人們已經掌握了用魔法礦石煉製法杖的技術。那時人們就認識到,乙個法杖的法力取決於使用的礦石。一般地,礦石越多則法力越強,但物極必反 有時,人們為了獲取更強的法力而使用了很多礦石,卻在煉製過程中發現魔法礦石全部消失了,從...
BZOJ2460 元素(貪心,線性基)
bzoj 第一行包含乙個正整數n,表示礦石的種類數。接下來 n行,每行兩個正整數numberi 和 magici,表示這種礦石的元素序號 和魔力值。僅包一行,乙個整數 最大的魔力值 3 1 10 2 20 3 30 由於有 魔法抵消 這一事實,每一種礦石最多使用一塊。如果使用全部三種礦石,由於三者的...
BZOJ 2460 元素 線性基
input 第一行包含乙個正整數n,表示礦石的種類數。接下來 n行,每行兩個正整數numberi 和 magici,表示這種礦石的元素序號 和魔力值。output 僅包一行,乙個整數 最大的魔力值 sample input 3 1 10 2 20 3 30 sample output 50hint ...