自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 【LOJ3395】【2020-2021 集训队作业】Yet Another Permutation Problem(容斥,生成函数,多项式)

题目相当于让我们考虑某种排列最少能经过几次操作得到。操作是从 1∼n1\sim n1∼n 的顺序排列中抽取若干个元素放到排列头和尾,那么假设进行了 lll 次操作,1∼n1\sim n1∼n 中还会剩下至少 n−ln-ln−l 个元素没有被抽取,也就是说这个排列的最长连续上升段长度至少是 n−ln-ln−l。也就是说经过 lll 次操作能得到某个排列 ppp 的必要条件是 ppp 的最长连续上升段的长度至少是 n−ln-ln−l。显然这个条件也是充要条件:假设某个排列 ppp 的最长连续上升段的长度大

2021-09-26 11:55:30 23

原创 【NOI2018】归程(kruskal重构树)

这道题最后会化为这么一个问题:给一张图,每条边都有边权,多组询问,每次给出 u,ku,ku,k,问从 uuu 开始走,只走边权 ≤k\leq k≤k 的边,请维护 uuu 能走到的点的集合。这就需要用到一种叫 kruskal 重构树的东东。首先可以发现,若 uuu 能走到 vvv,那么 uuu 在最小生成树上也必然能走到 vvv,所以我们只需要在原图的最小生成树上面走即可。我们考虑用 kruskal 算法构建最小生成树时的过程:假设当前枚举到的边的两个端点所在连通块不同(设这两个连通块的根分别是 a,

2021-09-17 15:52:57 7

原创 【XSY3338】game(期望,点分治,FFT)

题面game题解首先可以看出 “等概率选连通块->连通块内等概率选点” 相当于 “全局等概率选点”。一开始感觉无从下手,但是题目中还是给了一点提示。题目让我们输出答案乘 n!n!n! 后的结果,于是想到枚举一个 1∼n1\sim n1∼n 的排列 pip_ipi​ 表示依次选择并删除的点的序列。那么对于某一个特定的 pip_ipi​,这种删点方法中所有点被捶的总次数等于 ∑i=1n(pi所在连通块还剩下的点数)\sum\limits_{i=1}^n (p_i所在连通块还剩下的点数)i=1∑n

2021-09-16 22:08:59 6

原创 【XSY4186】Binomial(结论,数位DP)

题面Binomial题解设 ord⁡(n)\operatorname{ord}(n)ord(n) 表示 nnn 分解质因数后 ppp 的幂次,那么我们就是对于每一个 kkk 要求有多少 0≤m≤n0\leq m\leq n0≤m≤n 使得 ord⁡(Cnm)=k\operatorname{ord}\left(C_n^m\right)= kord(Cnm​)=k。首先有一个很显然的式子:ord⁡(n!)=∑k=1∞⌊npk⌋\operatorname{ord}(n!)=\sum\limits_{k=1

2021-09-16 12:53:49 14

原创 【XSY4184】谁(who)(01Trie,结论)

考虑哪些点对无论颜色怎么变都是没有用的(不可能成为答案)。先把 01Trie 建出来,对于每一个点 lcalcalca,找到异或值最小的两个点 u,vu,vu,v,使得 uuu 在 lcalcalca 左子树内,vvv 在 lcalcalca 右子树内,然后标记点对 (u,v)(u,v)(u,v)。(注意这里不考虑颜色)找到所有标记的点对可以 O(nlog⁡2ai)O(n\log^2 a_i)O(nlog2ai​) 实现,显然标记的点对只有 O(nlog⁡ai)O(n\log a_i)O(nlogai​

2021-09-14 16:13:12 6

原创 【XSY4182】下一个(next)(欧拉回路,构造)

题面下一个(next)题解我们可以这么转化问题:给每一条边定向,使得每一个点的出度至少为 222。证明新问题是原问题的充分条件:定好向后,我们先给每个点随便选一条出边,显然这些边形成若干连通块,且每个连通块点数不大于边数(都是基环树),且每个点都被恰好覆盖一次。然后我们把这些边删去,让剩下的边形成若干连通块,由新问题构造条件可知现在每个点肯定至少有一条出边被选上,于是能保证这些连通块中每个连通块点数不大于边数(都是基环树),且每个点都恰好又被恰好覆盖一次。如何找呢,每个点度数至少为 444 是一个

2021-09-14 14:30:14 4

原创 【HNOI/AHOI2018】排列(树上一类全序问题)

这个条件给的有点诡异:对于任意的 apj=pka_{p_j}=p_kapj​​=pk​,都有 k<jk<jk<j。那么对于某个 ax=ya_x=yax​=y,意思就是 yyy 在 ppp 中的位置小于 xxx 在 ppp 中的位置。那么如果我们连边 (ax,x)(a_x,x)(ax​,x),就是要求图中没有环,是一棵树,而且父亲在 ppp 中的位置要小于儿子在 ppp 中的位置。再看一下要求:按 ppp 的顺序把 i×wpii\times w_{p_i}i×wpi​​ 加起来得到总权

2021-09-10 20:24:15 7

原创 【XSY3331】东非大裂谷(结论,DP)

一般这种 “分段,求每段极值和的最大值” 的题都有两个结论:一段的最大值和最小值一定是该段的两个端点。证明:如果不是的话:那么我们显然可以把最小值和最大值所在位置之间的部分提取出来作为一段,而其他的部分分离出去,这样得到的答案肯定不劣。一段肯定是单调不增或单调不降的。证明:如果不是的话:假设该段为 a1,a2,⋯ ,ana_1,a_2,\cdots,a_na1​,a2​,⋯,an​。由结论1,我们可以假设 a1a_1a1​ 该段的最小值、ana_nan​ 为该段的最大值(a1a_1a1​ 为

2021-09-10 19:57:07 17

原创 【XSY3330】地中海气候(思维)

题目让我们动态维护一个堆,有两种操作:加入一个数、询问并取出最大值。比较巧妙的地方是这两种操作是轮流进行的。我们可以用桶来维护这个堆,顺便记录一下当前桶内的最大值。然后加入一个数时,若它比桶内最大值大,那么它在下一次询问的答案必然是它,那么我们就无需加入桶内,直接记录一下即可。否则它比桶内最大值小,那么就把它加入桶内。于是你发现桶的最大值是不会增大的,于是总时间复杂度为 O(nk)O(nk)O(nk)。#include<bits/stdc++.h>#define N 100010#

2021-09-10 19:35:20 11

原创 【HDU6326】Monster Hunter(树上一类全序问题)

先考虑没有树的限制,即我们可以任意安排顺序打怪兽,那么这就是一个全序问题。考虑在某种顺序下,假设初始血量为 ststst,那么打到第 iii 个怪物时剩余的血量就是 st+∑j=1i−1(bj−aj)st+\sum\limits_{j=1}^{i-1}(b_j-a_j)st+j=1∑i−1​(bj​−aj​),如果设 sumi=∑j=1i−1(bj−aj)sum_i=\sum\limits_{j=1}^{i-1}(b_j-a_j)sumi​=j=1∑i−1​(bj​−aj​),那么我们就需要保证 ∀i,s

2021-09-09 16:37:10 17

原创 【AGC023F】01 on Tree(树上一类全序问题)

显然如果没有树的限制,我们优先选 000,然后选 111。如果有了树的限制,我们考虑下面这么一种贪心方法:假设当前能够选的点的集合为 SSS(初始时 SSS 只包含根),然后选出 SSS 中优先级最大的点 uuu(000 的优先级大于 111 的优先级)放在序列末尾,然后把 uuu 从 SSS 中删除,并且把 uuu 的儿子都塞进 SSS 里面,再重复上述过程直至 SSS 为空为止。这个贪心方法看起来很对,但可能会出现下面这种情况:如图,我们选完根节点 111 后,SSS 中包含的是节点 222 和

2021-09-09 15:33:48 22

原创 【XSY3326】米缸(时间复杂度均衡,线段树,基环树,倍增)

时间复杂度的均衡。先考虑暴力的想法:显然这是一棵基环树,那么我们每次修改时暴力 O(nm)O(nm)O(nm) 重构基环树,然后询问的时候就能 O(1)O(1)O(1) 查询。时间复杂度 O(nmq)O(nmq)O(nmq)。考虑均衡时间复杂度,我们考虑只记录第一列的每个点 iii 走 mmm 步之后会绕回第一列的哪个点,设为 FiF_iFi​。那么这棵基环树的大小就是 nnn 了。然后询问的时候只需要先 O(m)O(m)O(m) 暴力走到第一列再直接 O(1)O(1)O(1) 在基环树上走然后再 O(

2021-09-09 14:12:10 15

原创 【XSY3325】社保(拓扑序)

显然我们先缩点,之后转化为一个 DAG,设为 GGG,设由其反边构成的图为 G′G'G′。题意就是求所有 “好的” 点,其中一个 “好的” 点需要满足这个点在 GGG 上能走到的点和在 G′G'G′ 上能走到的点的并集为所有点。思路 1:显然一个点不可能同时在 GGG 和 G′G'G′ 上都能被同一个点 uuu 走到(除了这个点就是 uuu),于是我们可以在 GGG 和 G′G'G′ 上分别求出 uuu 能走到的点的个数,再加起来判断是否等于 n+1n+1n+1。但你发现这个能走到的点的个数并不好快速求。

2021-09-09 13:35:05 11

原创 【ARC083F】Collecting Balls(图论模型,二分图,基环树,拓扑序)

首先用 2n2n2n 个点表示每个机器人,原图中的一个球转化为图上的一条边,于是转化为一个二分图模型。我们对这个二分图的每个连通块分开考虑(假设有 cntcntcnt 个连通块),显然一个大小为 sss 的连通块应该有 sss 条边,于是这既是一个二分图也是一个基环树。二分图+基环树唯一的性质应该就是基环树中间的那个环是偶环,但这个性质在这题没什么用。考虑先选出每个球是被哪个机器人消灭的,这就相当于一个边定向问题。我们为这个图上面的每一条边定向,边指向的点表示这条边所代表的球是被那个指向的机器人消灭的

2021-09-09 12:59:35 13

原创 【AGC001E】BBQ Hard(图论,dp)

题意:求 ∑i=1n∑j=1i−1(Ai+Aj+Bi+BjAi+Aj)\sum\limits_{i=1}^n\sum\limits_{j=1}^{i-1}\dbinom{A_i+A_j+B_i+B_j}{A_i+A_j}i=1∑n​j=1∑i−1​(Ai​+Aj​Ai​+Aj​+Bi​+Bj​​),n≤2×105n\leq 2\times 10^5n≤2×105,Ai,Bi≤2000A_i,B_i\leq 2000Ai​,Bi​≤2000。显然是从 Ai,Bi≤2000A_i,B_i\leq 2000Ai

2021-09-01 20:02:56 12

空空如也

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除