考虑整个建边过程,任意 (a,b) 都连边肯定不好搞,因为只要求连通,所以看一下有没有等价方案,发现在某一天 m-i+1=g 时,把所有的 kg 向 g 连边是等价的,可以直接把询问两个端点丢到对应集合里,每次合并枚举小集合查大集合就能做到 n\log n #include<bits/stdc++.
怎么感觉我这个考场做法有点非常规啊 还是写写思路吧,初步观察数组 a 的顺序没用,有用的是每个元素的出现次数数组 cnt ,考虑将 cnt 画成直方图研究一下,然后 (x,x,x),(x,x+1,x+2) 分别变为了 3\times 1,1\times 3 的矩形,而且覆盖的时候还能纵向断开(同时这
problem 疑似神题 首先发现一个事情:相同颜色的书一定是一起动或者一起不动,即行为平行。 发现了这件事就可以简单 \texttt{dp} 了。 #include<bits/stdc++.h> using namespace std; #define fio(x) freopen(x".in",
传送门 k 太小了,结合题目易于想到枚举前 2^k 位的状态,然后限制不是一般算法能做的,考虑 \texttt{dp} ,每加一位贡献只跟前 k-1 位有关,设进状态转移,设 f_{i,j} 表示考虑到第 i 位,后 k-1 位状态为 j 的方案数,每次转移分别考
你谷传送门 非常 OI 的一道题 看到这题就往图论的方向去想了,但其实能看出本质与竞赛图有关的话甚至能更快,只可惜事先没有接触过,敏感度不够。 往正常方向推也挺好推的,但其实我在第一步就炸了,我考虑的是怎么利用整个排名表的信息维护一位选手的答案 傻逼吗我是 ,这里两者信息完全不对等,大量信息被浪费。
挺好一题,能学到许多东西。 首先看到题面所求是由对每一条边考虑产生的点的信息和,如果顺着题目的思路思考那肯定是枚举边,用边的限制考虑边的贡献,在仔细考虑一下重心相关的限制,基本就能想到倍增,预处理等方法去动态地对每条边去计算对应的重心,可喜可贺,可喜可贺。 虽然这样很好想,可具体实现似乎有点麻烦,遂
题目传送门 代码实现和一些思路参考了一些题解。 遇到这种序列上研究大小的序列问题,应该主动考虑笛卡尔树。 对原序列建出一棵大根笛卡尔树。稍微转化一下问题的连边条件,首先每个节点必定和它的左子树同在所有点在同一个连通块,这样初步连边后可以看出连通块与连通块之间通过树上右链(从根一直向右走的链)的边进行