摘要:
题目链接 "BZOJ3523" 题解 简单的贪心题 优先与上一个不一样且数量最多的,如果有多个相同,则优先选择非结尾颜色 比较显然,但不知怎么证 C++ include include include include include include include define Redge(u) f 阅读全文
摘要:
题目链接 "BZOJ1599" 题解 最小环模板?周末了养生一下【逃】 解释一下原理 $floyd$算法每一轮求出以$[1,k]$为中介点的最短路 我们对于一个环,考虑环上编号最大的点,在$k$枚举到那个点时,$k$两边的点之间不经过$k$的最短路已经计算出来,相连接便是一个环 容易发现最小的环一定 阅读全文
摘要:
题目链接 "BZOJ4245" 题解 套路① 位运算当然要分位讨论,高位优先 考虑在$or$下,如果该位为$0$,则每一位都为$0$ 套路② 我们选m段异或和,转化为$m$个前缀和的点,且其中有一个是$n$ 容易发现,该位结果要为0,则选取的前缀和该位都为$0$ 所以贪心查找所有该位为$0$的,首先 阅读全文
摘要:
题目链接 "BZOJ4873" 题解 题意很鬼畜,就可以考虑网络流【雾】 然后就会发现这是一个裸的最大权闭合子图 就是注意要离散化一下代号 C++ include include include include include include define Redge(u) for (int k = 阅读全文
摘要:
题目链接 "BZOJ4144" 题解 这题好妙啊,,orz 假设我们在一个非加油站点,那么我们一定是从加油站过来的,我们剩余的油至少要减去这段距离 如果我们在一个非加油站点,如果我们到达不了任意加油站点,我们一定废了 那么我们在一个非加油站点,就一定可以到达最近的加油站,而由于我们剩余的油是要减去到 阅读全文
摘要:
题目链接 "BZOJ3747" 题解 这种找区间最优的问题,一定是枚举一个端点,然后用数据结构维护另一个端点 我们枚举左端点,用线段树维护每个点作为右端点时的答案 当左端点为$1$时,我们能$O(n)$预处理出每个位置的答案初始化线段树 当左端点右移一位时,该位上的电影就从区间删除了,记$nxt[i 阅读全文
摘要:
题目链接 "BZOJ3709" 题解 贪心很显然 我们先干掉能回血的怪,当然按照$d$升序顺序,因为打得越多血越多,$d$大的尽量往后打 然后再干掉会扣血的怪,当然按照$a$降序顺序,因为最后受的伤害一定,回的血也一定,先尽量回多的血以尽量承受住当前伤害 C++ include include in 阅读全文
摘要:
题目链接 "BZOJ3714" 题解 我们如果知道了所有的数,同样就知道了所有的前缀和 相反,我们如果求出了所有前缀和,就知道了所有的数,二者是等价的 对于一个区间$[l,r]$如果我们知道了前缀和$sum[l 1]$,我们就知道了$sum[r]$ 所以区间$[l,r]$相当于连接$l 1$和$r$ 阅读全文
摘要:
题目链接 "BZOJ3922" 题解 考虑暴力,修改$O(1)$,查询$O(\frac{n}{d})$ 考虑线段树,如果对每种差值建一棵线段树,修改$O(nlogn)$,查询$O(logn)$ 能不能均摊? 线段树查询快,修改慢 暴力修改快,查询慢 容易发现当$d$比较大时暴力还是可以接受的,所以我 阅读全文
摘要:
题目链接 "BZOJ3495" 题解 每个城市都有选和不选两种情况,很容易考虑到2 sat 边的限制就很好设置了,主要是每个郡只有一个首都的限制 我们不可能两两之间连边,这样复杂度就爆炸了 于是乎就有了一个非常厉害的方法: 前缀后缀和 我们令$1$表示选,$0$表示不选,维护一个郡的前缀和、后缀和 阅读全文