标签:区间 ace 表示 连通 单调队列 中间 集合 递增 一个
\(BIT\)
把所有点按照下标排序后,考虑消灭一个点会给多少个点消灭掉
发现左边速度比它大的和右边速度比它小的都能够通过接触它消灭
继续分情况,考虑左边速度比它小的一些点
如果速度比右边速度的最小值要大的话就可以通过接触右边的点消灭
同理对于右边速度比它大的点只要比左边最大值小就照样可以消灭掉
所以每个点能够消灭的,是速度一段区间内的点\([min,max]\)
然后就是线段覆盖问题了
?
考虑已经知道答案是多少了,然后就是有一个\(ans*n\)的网格
\(t\)串在上
现在要求从每个\(t\)串上的点走到\(s\)串的某个位置\(pos[i]\),并且要求路径不能有交
求最小的\(ans\)
发现首先这个\(pos\)是单调递增的才行
然后就是考虑为什么会有\(ans\)这个长,是因为路径被迫在\(y!=0\)的时候转弯了
也就是后边有多少个\(pos<i\),答案就至少是多少
所以用个单调队列记录下后缀的\(pos\)在队头删掉大于\(i\)的\(pos\)然后更新答案就可以了
考虑容斥
用已有的边容斥,容斥的是至少用了几条坏边
用了几条坏边就会少几个连通块,所以可以用连通块来容斥
(可是我想不到)
所以状压\(dp[i][S]\)表示\(S\)这个集合形成一条链的方案 数
然后背包集合的方案数\(O(14*3^14)\)
然后求出来了有\(i\)个链的方案数
然后可以自乘\(n\)次,代表了一共有\(i\)条链的方案数
但\(*i!\)就代表我至多有\(i\)条链方案数,并且中间连接的边有可能是坏边,所以是容斥
标签:区间 ace 表示 连通 单调队列 中间 集合 递增 一个
原文地址:https://www.cnblogs.com/hzoi2018-xuefeng/p/12628378.html