随笔分类 -  all—好题

1 2 3 4 5 ··· 13 下一页
摘要:首先看这样做的特点,就是分到最后小块里的点合并上去的时候相对顺序不变,所以先加上块内逆序对的期望 合并的时候一定是一边卡住一个大值,另一边跳指针,所以把一个值向右直到有大于它的值位置的一段区间看作一段 当前合并两块合并到第i个和第j个,如果i和j都是块的开头就一定不会构成逆序对,因为双指针的时候会直 阅读全文
posted @ 2019-06-17 17:00 lokiii 阅读(260) 评论(0) 推荐(1)
摘要:区间不交叉,可以看出区间构成了树形结构,建出树之后,设f[u][i]为u这个区间最大值最多加i的概率,转移是\\( f[u][i]=p[u]\ \prod f[v][mxu mxv 1]+(1 p[u])\ \prod f[v][mxu mxv] \\) 注意要理性选择建树方式,扫描就行了,不要瞎二 阅读全文
posted @ 2019-06-16 17:28 lokiii 阅读(174) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2019-06-15 21:15 lokiii 阅读(1) 评论(0) 推荐(0)
摘要:首先看这个范围很夸张但是其实有限制的也就在1e18\ n范围里(走完一圈的边权),然后限制一定是有负环 用Floyd传递闭包,然后设f[i][j][k]为从1走了i步到j并且有k个x的最短路,用B F处理,然后有负环就是kx+f[n][i][k] include include include in 阅读全文
posted @ 2019-06-14 20:26 lokiii 阅读(283) 评论(0) 推荐(0)
摘要:有一种限制下界强制选的,但是也可以不用 把每个格点拆成两个,一个连s一个连t,对于不是必选的连中间连流量1费用0边表示不选,然后黑白染色,黑点连横着白点连竖着,边权就是这条水管的权值,然后跑最大费用最大流 然后判断不可能就是不满流 并且这样可以满足每个被选的格子都在一个环上,因为他一定唯一对应另一个 阅读全文
posted @ 2019-06-14 11:00 lokiii 阅读(790) 评论(0) 推荐(0)
摘要:任意k个都可以,也可以看做把不行的都选了,再随便选一个可以的要选的数量 把区间和m个值都排序,区间按l一序r二序排,枚举m个值,小根堆维护能帮韩当前枚举值的区间的右端点,这样方便删除区间,然后剩下的就都不行,所以ans=max(n size+1) 注意枚举完要弹出一个区间,表示这个区间属于当前枚举值 阅读全文
posted @ 2019-06-13 17:20 lokiii 阅读(249) 评论(0) 推荐(0)
摘要:先跑spfa求出最短路构成的DAG,然后在DAG上跑出支配树dfs出size取max即可 关于支配树,因为是DAG,支配点就是入点在支配树上的lca,所以一边拓扑一边预处理倍增,然后用倍增求lca cpp include include include include include using n 阅读全文
posted @ 2019-06-13 15:54 lokiii 阅读(168) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2019-06-13 11:08 lokiii 阅读(1) 评论(0) 推荐(0)
摘要:容易看出是用质因数凑n 首先01个因数的情况可以特判,2个的情况就是ap1+bp2=n,b=n/p2(mod p1),这里的b是最小的特解,求出来看bp2 include include include using namespace std; const int N=200005,M=316000 阅读全文
posted @ 2019-06-11 19:35 lokiii 阅读(306) 评论(0) 推荐(0)
摘要:考虑当前合法的一个点集s,如果他合法,那么一定有一个完备匹配的点集包含这个点集,也就是两边都满足hall定理的话这两边拼起来的点集也满足要求 所以分别状压两边点集用hall定理转移判断当前点集是否合法,然后分别对两边点集的权值和排个序2point扫一下计算答案即可 阅读全文
posted @ 2019-06-11 15:03 lokiii 阅读(348) 评论(0) 推荐(0)
摘要:方案二选一,显然是最小割,朴素的想法就是一排人点一排边点,分别向st连流量1的边,然后人点向路径上的边点连流量inf的边跑最大流 但是路径可能很长,这样边数就爆了,所以考虑倍增,然后倍增后大区间向小区间连,这样路径只要连向log个区间就行了,然后跑最大流 输出方案是在残量网络上从s点沿着没满流的边b 阅读全文
posted @ 2019-06-11 09:37 lokiii 阅读(254) 评论(0) 推荐(0)
摘要:分别给行和列hash建两排点,对(x,y)坐标连x行y列的点 设红色价格低,那么就要尽量多选红色 设一个点出度为s,要求最小的最大差值为d,又,假设有流量表示选红没流量表示选蓝,那么要求就变成了这个点的01边差至少为d,列一下式子就是这个点的流入(或者流出)流量可行区间为[(s d)/2,(s+d) 阅读全文
posted @ 2019-06-10 21:01 lokiii 阅读(240) 评论(0) 推荐(0)
摘要:首先假设全睡觉,然后用费用流考虑平衡要求建立网络流 把1~n的点看作是i k+1~k这一段的和,连接(i,i+k,1,e[i] s[i]),表示把i改成吃饭,能对i~i+k 1这一段的点产生影响;然后连接(i,i+1,k ms me,0),这是除了限额外可以随便选的(i+k,i+1 n就连到t) 然 阅读全文
posted @ 2019-06-08 18:23 lokiii 阅读(469) 评论(0) 推荐(0)
摘要:因为没有重复串,所以把有包含关系的串连边之后是个DAG,也就是二分图,就变成求二分图的最大独立集=n 最小点覆盖=n 最大匹配 关于包含关系,建出AC自动机,然后把串放上去找子串,但是如果每次都一路找到根就会T,所以每次只找最近的一个,并且对于没有结尾id的点承接father的id,这样就O(1)的 阅读全文
posted @ 2019-06-01 23:34 lokiii 阅读(415) 评论(0) 推荐(0)
摘要:因为是字典序所以贪心选当前能选的最小的,所以问题就在于怎么快速计算当前这个位置能不能选枚举的字母 重排之后的序列是可以和原序列完美匹配的,而完美匹配需要满足hall定理,也就是左边任意k个集合一定和右边至少k个点相连 又一共6个字符,原序列中相同字符点连出的点集是一样的,所以只要2^6个字符集合满足 阅读全文
posted @ 2019-06-01 15:52 lokiii 阅读(251) 评论(0) 推荐(0)
摘要:给出的模型很难搞,所以转换一下,记p[i]为i这个数的位置,然后相邻两个p值差 k的能交换,发现使原问题字典序最小也需要使这里的字典序最小 注意到p值差 include include using namespace std; const int N=3000005; int n,k,a[N],p[ 阅读全文
posted @ 2019-05-26 22:25 lokiii 阅读(193) 评论(0) 推荐(0)
摘要:首先直接按要求列出式子是\\( \sum_{i=1}^{n}\sum_{j=i+1}^{n}C_{a_i+a_j+b_i+b_j}^{a_i+a_j} \\) 这样显然过不了,因为ab的数据范围比较小,所以从这里入手,注意到后面的组合数含义是从点(ai,bi)走到点( aj, bj)的方案数 把但是 阅读全文
posted @ 2019-05-25 16:16 lokiii 阅读(143) 评论(0) 推荐(0)
摘要:把回文串的相等关系连一下,发现最后要求的是一笔画问题 注意到奇数长度的中间有一个单独没有连线的,所以a数组至多有两个奇数值 如果没有奇数,那么b在最前面放一个1,然后把a[1]~a[m 1]放上去,这样就是错位着一笔画了,然后剩下一个奇数值连成若干2中间一个1的样子; 如果一个奇数,那么把奇数放到最 阅读全文
posted @ 2019-05-24 23:30 lokiii 阅读(201) 评论(0) 推荐(0)
摘要:一开始没看到要保证最后是树……所以一定要从叶子开始删 枚举重心,如果k是偶数,那么按当前重心提起来deep大于k/2的全都要切掉,这样枚举重心然后取min即可 奇数的话就是枚举直径中间的边,然后从两边的点分别dfs删点 cpp include include using namespace std; 阅读全文
posted @ 2019-05-22 19:36 lokiii 阅读(228) 评论(0) 推荐(0)
摘要:首先把点权归到边上,设点权较小的一个点是v,也就是(u,v)的边权是log2(dis(u,v)) a[v]+a[v]+a[u] 然后还有一个性质就是这棵树按点权最小点提起来就是一个堆 暴力是n^2的MST,然后考虑优化,按照点权从小到大加入生成树,那么每个点加进去的时候会连到点权比他小的点上 因为l 阅读全文
posted @ 2019-05-11 17:38 lokiii 阅读(233) 评论(0) 推荐(0)

1 2 3 4 5 ··· 13 下一页