solution-code3192

把图上的每个点拆成两个点,按照老套路连边,把交换的连边流量无穷、代价为1,其余的边流量为1、代价为0,如果满流就输出代价
注意num1和num2数组的值,这里的id不能重复!

阅读更多

[luogu1174]打砖块

注意:子弹没有的时候不能打有奖励的砖块,打有奖励的砖块可以抽象成借子弹
w1[i][j]代表在能借子弹的情况下第i列用了j颗子弹能够达到的最高分数,w2代表不能借子弹的最高分数
f1[i][j]代表能借子弹的情况下从左往右打了i列用了j颗子弹能够达到的最高分数,f2代表不借子弹的最高分数

阅读更多

solution-code3734

环形序列:拆环为链,取maxx和sum-minn(刨去中间一块的剩余的链)的最大值
不能是整个序列的和:如果结果是序列的和,那么减去序列最小值
注意细节!

阅读更多

solution-code2728

一道很麻烦的线段树模板题
由于要进行翻转,0和1的数量、左边最长、右边最长以及区间答案都需要处理
询问操作就对需要的区间进行合并,用类似pushup的方法将TreeNode传递给上一层
注意:

  • 翻转的时候tag标记也要做相应的改变(如果没有打标签就不能修改!)
  • tag标签和rev标签会冲突,由于rev标签会修改tag标签的值,那么必须先处理rev标签才能处理tag标签
  • Lmax和Rmax的含义,不是子树的左儿子或右儿子的最长连续值,而是子树全部的最长连续值
  • 在线段树操作中,修改操作直接修改单层,pushdown操作修改其儿子

阅读更多