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 优化即可

posted @ 2025-07-07 17:24  dingchenjun  阅读(34)  评论(1)    收藏  举报