bitset以及优化dp
基础用发
bitset<4> s(string("1001")) 用字符串填充,不足高位补0
bitset<10> s(5) 用5的二进制位填充,不足高位为0
s.count() 返回有多少个1
s.any() 至少有一个1返回true,反之false
s.none() 全为0返回true,反之false
s.set() 将每位全部赋值为1
s.set(u, v) 将第u位 赋值为v, v只能取值0或者1
s.reset() 将每位全部赋值为0
s.reset(k) 将第k位赋值为0
~:按位取反
&:按位与
|:按位或
^:按位异或
<< >>:左/右移(常用)
==/!=:判两个bitset是否相等
优化应用例题
CF333E Summer Earnings
那么先把所有距离存下来,对于一个 (i,j) 的边时,如果存在 (i,k),(k,j) ,使得这两条边都大于等于 (i,j),那么 (i,j) 就是一个可行的答案。
先把边从大到小排序,然后遍历所有边,遍历到一条边后就先判断存不存在 (i,k) 和 (k,j) 都被标记过,然后再把 (i,j) 和 (j,i) 打上标记。
注意到这样做是 $n^3$
的,bitset 优化即可
浙公网安备 33010602011771号