摘要: 链上问题是一个经典的贪心。于是考虑破环成链,将链倍长。求出每个线段右边能作为后继的最远线段,然后倍增即可。 阅读全文
posted @ 2018-10-29 23:45 Gloid 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 即删除一条边使图中不存在奇环。如果本身就是个二分图当然任意一条边都可以,先check一下。否则肯定要删除在所有奇环的交上的边。 考虑怎么找这些边。跑一遍dfs造出dfs树,找出返祖边构成的奇环。可以通过树上差分标记奇环上的边。 但是这显然只包含了一部分奇环。注意到如果某条在奇环上的边同时也在一个偶环 阅读全文
posted @ 2018-10-29 20:34 Gloid 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 判断网格图中某两点是否被割开,可以将割边视为边区域视为点,转化为可切割这两点的区域是否连通。于是每次判断使两个区域连通后是否会形成环(边界视为连通),若是则说明被两点被割开。并查集维护。 阅读全文
posted @ 2018-10-29 17:30 Gloid 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 好友状态的变化次数不会超过m,于是考虑暴力,对每个人记录其好友关系的变化,通过前缀和计算贡献。这需要查询一段前缀时间内某人发的微博数量,可以离线建一棵绝对平衡的平衡树。事实上完全可以线性。 阅读全文
posted @ 2018-10-29 16:34 Gloid 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 当n大到一定程度(>21)时一定无解,并不会证。 如果要取出一个排列,显然应该让每一位在序列中的位置尽量靠前。于是设f[S]表示存在S子集中这些字母所组成的所有排列的最短前缀的长度,枚举当前排列最后一个字母转移即可。 阅读全文
posted @ 2018-10-29 15:56 Gloid 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 似乎是noip2017d2t3的一个部分分。用splay的话当然非常裸,但说不定会被卡常。可以发现序列中数的(环上)相对位置是不变的,考虑造一棵权值线段树维护权值区间内还有多少个数留在序列中,每次在线段树上二分即可。 阅读全文
posted @ 2018-10-29 13:53 Gloid 阅读(120) 评论(0) 推荐(0) 编辑
摘要: 首先显然如果块大小固定,方案唯一。如果在方案中将一个点和其父亲分开,那么这个点的子树大小一定是块大小k的倍数。并且如果能找到n/k个点(当然n是k的倍数)满足这条,一定可以以此构造一个划分方案,看起来挺显然的感(xia)性(cai)证(jie)明(lun)一下。于是统计子树大小即可。 阅读全文
posted @ 2018-10-29 11:07 Gloid 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 注意到只有增加点/合并的操作。这些操作都可以用线段树完成,于是线段树合并一发就好了。注意乘积大小直接比较肯定会炸,取个对数即可。数据中存在重边。 阅读全文
posted @ 2018-10-29 09:59 Gloid 阅读(199) 评论(0) 推荐(0) 编辑
摘要: A:枚举答案即可。注意答案最大可达201,因为这个wa了一发瞬间爆炸。 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using 阅读全文
posted @ 2018-10-29 08:16 Gloid 阅读(241) 评论(0) 推荐(0) 编辑