19暑假線性基B

2021-09-25 17:48:49 字數 1011 閱讀 5893

input

第一行包含乙個正整數n,表示礦石的種類數。

接下來 n行,每行兩個正整數numberi 和 magici,表示這種礦石的元素序號

和魔力值。

output

僅包一行,乙個整數:最大的魔力值

sample input

31 10

2 20

3 30

sample output

50hint

由於有「魔法抵消」這一事實,每一種礦石最多使用一塊。

如果使用全部三種礦石,由於三者的元素序號異或起來:1 xor 2 xor 3 = 0 ,

則會發生魔法抵消,得不到法杖。

可以發現,最佳方案是選擇後兩種礦石,法力為 20+30=50。

對於全部的資料:n ≤ 1000,numberi ≤ 10^18

,magici ≤ 10^4

先用結構體排個序,由大到小遍歷一次看能否插入線性基

因為後面的數字若不能插入,必然是前面若干個數字異或等於它,所以要在這些所有數字中去掉乙個,當然是去掉魔法最少的數字最好,故可貪心遍歷,若可插入則ans加上這個序號對應的魔法值

#include#define ll long long

#define maxn 1005

using namespace std;

int t,n,q;

ll k,tmp;

struct node

stone[maxn];

int cmp(node a,node b)

struct l_b

inline bool insert(ll x)

ll get_min()

inline void rebuild()

ll kth(ll k) };

l_b merge(const l_b &n1,const l_b &n2)

int main()

printf("%d\n",ans);

}

19暑假線性基C

第一行包含兩個整數n和 m,表示該無向圖中點的數目與邊的數目。接下來m 行描述 m 條邊,每行三個整數si,ti di,表示 si 與ti之間存在 一條權值為 di的無向邊。圖中可能有重邊或自環。output 僅包含乙個整數,表示最大的xor和 十進位制結果 注意輸出後加換行回車。sample in...

19暑假線性基F

已知乙個長度為n的正整數序列a 下標從1開始 令 s s 的冪集2 s定義為s 所有子 集構成的集合。定義對映 f 2 s zf 空集 0f t xor a t 對於一切t屬於t現在albus把2 s中每個集 合的f值計算出來,從小到大排成一行,記為序列b 下標從1開始 給定乙個數,那麼這個數在序列...

19暑假dp優化

l公司有n個工廠,由高到底分布在一座山上。如圖所示,工廠1在山頂,工廠n在山腳。由於這座山處於高原內 陸地區 乾燥少雨 l公司一般把產品直接堆放在露天,以節省費用。突然有一天,l公司的總裁l先生接到氣象 部門的 被告知三天之後將有一場暴雨,於是l先生決定緊急在某些工廠建立一些倉庫以免產品被淋壞。由於...