自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【XSY2416】带权图(图论,高斯消元)

感觉非常高妙。考虑暴力做法。首先对于题目中的第三种限制:若两个环满足,那么这两个环拼起来得到的环肯定也满足。那么我们可以只考虑那些互相独立的简单环。随便找到原图的一棵生成树,那么一条非树边可以对应一个简单环,共 m−(n−1)m-(n-1)m−(n−1) 个,看成 m−(n−1)m-(n-1)m−(n−1) 条方程。再配上第二条限制,总共就得到了 n+m−(n−1)=m+1n+m-(n-1)=m+1n+m−(n−1)=m+1 条方程,共有 mmm 个未知数。O(m3)O(m^3)O(m3) 高斯

2021-10-31 22:19:26 12

原创 【XSY2418】修路(最短路图,支配)

首先可以 O(mlog⁡n)O(m\log n)O(mlogn) 按题意把树建出来,显然这是一棵最短路图的生成树。那么询问 u,vu,vu,v 相当于在树上 (u,v)(u,v)(u,v) 路径上找到深度最深的一点 www,满足最短路图中刨掉树上路径 (u,w)(u,w)(u,w) 上的边后仍有从根到达 vvv 的路径。考虑处理出 f(u)f(u)f(u) 表示 uuu 深度最浅的祖先满足 f(u)f(u)f(u) 能通过非树上路径 (f(u),u)(f(u),u)(f(u),u) 上的边在最短路图中到

2021-10-31 21:15:51 26

原创 错排数计数

定义:∀i∈[1,n],pi≠i\forall i\in[1,n],p_i\neq i∀i∈[1,n],pi​​=i 的长度为 nnn 的排列数。一开始看到的时候还想用容斥推:∑i=0n(ni)(−1)i(n−i)!\sum\limits_{i=0}^n\binom{n}{i}(-1)^i(n-i)!i=0∑n​(in​)(−1)i(n−i)!,结果发现太垃圾了。递推法设 D(n)D(n)D(n) 表示长度为 nnn 的错排数,考虑枚举数 nnn 放在了第 iii 个位置(1≤i≤n−11\leq

2021-10-30 10:22:14 11

原创 【LOJ6077】【2017 山东一轮集训 Day7】逆序对(排列计数DP,容斥,旋转体积背包)

搞不懂排列计数。一种计数方法是考虑从小往大往当前排列中插入每个数,存在一次插的位置不同那么最后的结果也不同。那么考虑插入 iii 时,对于 x∈[0,i−1]x\in[0,i-1]x∈[0,i−1] 均有且仅有一种方法使得逆序对个数增加 xxx。法一:考虑 DP,设 fi,jf_{i,j}fi,j​ 表示插入了 iii 个数,已经有 jjj 个逆序对的方案数,那么有转移 fi,j=∑l=0i−1fi−1,j−lf_{i,j}=\sum\limits_{l=0}^{i-1}f_{i-1,j-l}fi,

2021-10-29 22:02:17 23

原创 【XSY2506】bipartite(动态维护二分图,线段树,可撤销并查集)

感觉非常神奇,但大家都说非常套路/kk把所有操作离线下来,我们以时间为下标建线段树,对于一条边,我们把它加入到它出现的时间区间内去。我们在线段树上 dfs,每次到达一个节点的时候加边,到达叶子节点的时候输出,回溯的时候撤销(这就是这样做的好处,我们不需要删除,只需要撤销)。而只有加边和撤销操作的二分图是好维护的:使用可撤销并查集。每次加入一条边时,若两个端点不连通,那么将两个并查集连起来,其中可能需要对一个并查集整体反色,在根上打 tag 即可;若两个端点连通,假如同色则标记答案为 NO,假如不同色则

2021-10-29 15:51:32 11

原创 LW 串理论

定义串 SSS 为 LW 串,当且仅当 SSS 满足 SSS 的所有严格前缀都小于 SSS。LW 串有以下很好的性质:对于 LW 串 SSS 的任意一个严格非空前缀 TTT,若 TTT 为 LW 串,那么 SSS 除去 TTT 后的剩下部分也是 LW 串。定义串 SSS 的 LW 划分为:将串 SSS 划分为两个 LW 串 S=ABS=ABS=AB,满足 SSS 包含一个同样为 BBB 的 LW 串前缀且 ∣B∣|B|∣B∣ 最大。根据 LW 划分我们可以定义 LW Tree,其中树上的每个

2021-10-28 19:19:10 10 1

原创 两个无限项求和问题(生成函数)

对 k=0∼Kk=0\sim Kk=0∼K 求 ∑i=0∞piik\sum\limits_{i=0}^{\infty}p^ii^ki=0∑∞​piik。∑i=0∞piik=∑i=0∞pik![xk]eix=k![xk]∑i=0∞(pex)i=k![xk]11−pex\begin{aligned}&\sum_{i=0}^{\infty}p^i i^k\\=&\sum_{i=0}^{\infty}p^ik![x^k]e^{ix}\\=&k![x^k]\sum_{i=0}^{\i

2021-10-28 18:39:55 28

原创 【XSY2815】净空(贪心,线段树)

题目要求我们分解为 x=∏i=1m(ci!)ti⋅px=\prod_{i=1}^m(c_i!)^{t_i}\cdot px=∏i=1m​(ci​!)ti​⋅p,那么显然 cic_ici​ 不可能大于等于 105+310^5+3105+3(为质数),否则 ci!c_i!ci​! 就会包括这个质数,而 xxx 不可能包含这个质因子。那么肯定是枚举 NNN 从 105+210^5+2105+2 到 222,过程中不断贪心地试除 N!N!N!。先对 x=∏i=1nai!x=\prod_{i=1}^n a_i!x

2021-10-28 17:04:47 15

原创 【LOJ2462】【2018 集训队互测 Day 1】完美的集合(容斥,树上连通块DP,exLucas)

点数-边数第二次见了(第一次是在十二省联考-希望),听说是树上连通块计数问题的一种经典方法?考虑对于一个树上连通块来说,能对所有点进行测试的点(以下称为 “合法点”)肯定也构成了一个连通块。由于选出的 KKK 个连通块有交,所以它们的并也是一个树上连通块,那么这个并中的合法点也构成了一个连通块。考虑容斥,一般的容斥的形式是 ”钦定某几个点为合法点“,但注意到合法点一定构成连通块,所以可以用 ”钦定某个点为合法点“ 的选取方案数减去 ”钦定某条边的两个端点都为合法点“ 的选取方案数,这样每一种选取方案都

2021-10-27 22:03:04 19

原创 【CFgym102870J】Junction of Orz Pandas(思维,容斥)

暴力做法就不会做……考虑容斥,用所有数 ≤ai\leq a_i≤ai​ 的方案减去所有数 <ai<a_i<ai​ 的方案得到最大值为 aia_iai​ 的方案,bib_ibi​ 同理容斥,时间复杂度 O(2n+mnm)O(2^{n+m}nm)O(2n+mnm)。直接在容斥上优化是没有前途的,考虑换一种思路。发现我们交换两行或交换两列并不影响答案,那我们不妨将 aia_iai​ 和 bib_ibi​ 从小到大排序。我们先取出 vvv 为所有 aia_iai​ 和 bib_ibi​ 的

2021-10-27 07:42:21 19

原创 【XSY2912】reo(构造)

考虑先找到一个原树的根。对于第一种限制,bbb 不能作为根。对于第二种限制,aaa 不能作为根。找到可以作为根的一个点 rtrtrt,显然由于限制互不矛盾肯定能找到。对于第一种限制先直接连边。考虑在满足第一种限制的前提下尽量满足第二种限制:让连通的点作为 rtrtrt 的一棵子树,不连通的点在 rtrtrt 的不同子树内。然后让那些连通的点往下递归去做即可。#include<bits/stdc++.h>#define N 1010using namespace std;

2021-10-26 14:50:25 9

原创 【loj2504】小H爱染色(组合,多项式)

记 HiH_iHi​ 表示给 iii 个球染色,染两次,每次染 mmm 个,其中要求第一个球必须染。那么题目即求:∑i=0n−1H(n−i)F(i)\sum_{i=0}^{n-1}H(n-i)F(i)i=0∑n−1​H(n−i)F(i)nnn 很大不好求,有种比较神仙的做法。设 F(i)=∑j=0mfjijF(i)=\sum_{j=0}^mf_ji^jF(i)=∑j=0m​fj​ij,对每个 jjj 分别求解:∑j=0mfj∑i=0n−1H(n−i)ij\sum_{j=0}^mf_j\sum_

2021-10-25 18:52:25 11

原创 【CF1537F】Figure Fixing(思维)

题意:给一张图,每个点有一个可以为负的权值 aia_iai​,一次操作可以选择一条边 (i,j)(i,j)(i,j) 并让 ai,aja_i,a_jai​,aj​ 同时增加任意一个可以为负的整数值,问是否存在操作方式使得所有点点权变为 000。首先判掉 ∑ai\sum a_i∑ai​ 为奇数的情况。由于逆操作的存在,那么我们可以对于原来的条件任意操作,而不影响答案。那么我们可以先通过一些操作把题目转化为更加简单的等价题目。考虑现在图中随便找一棵生成树出来,那么我们可以自底向上地将所有点的权值都变为

2021-10-22 11:52:28 9

原创 范德蒙德卷积

∑i=0k(ni)(mk−i)=(n+mk)\sum_{i=0}^k \binom{n}{i}\dbinom{m}{k-i}=\binom{n+m}{k}i=0∑k​(in​)(k−im​)=(kn+m​)可以理解为在大小分别为 n,mn,mn,m 的两个堆中共取 kkk 个物品,枚举在两个堆中各取了多少个。根据 (mi)=(mm−i)\dbinom{m}{i}=\dbinom{m}{m-i}(im​)=(m−im​) 可以得到许多推论:∑i=1n(ni)(ni−1)=(2nn+1)∑i=0n(n

2021-10-22 09:35:03 15

原创 【NOI2020】制作菜品(结论)

首先 m≥n−1m\geq n-1m≥n−1 一定有解:若 m≥nm\geq nm≥n,那么 max⁡di≥k\max d_i\geq kmaxdi​≥k,直接用 max⁡di\max d_imaxdi​ 一直做即可,接下来肯定是继续进入两种情况中的一种。若 m=n−1m=n-1m=n−1,那么 min⁡di+max⁡di≥k\min d_i+\max d_i\geq kmindi​+maxdi​≥k 且 min⁡di<k\min d_i<kmindi​<k,直接用完 min⁡di\

2021-10-20 17:17:55 9

原创 【CF1515F】 Phoenix and Earthquake(结论)

首先 Yes 的必要条件是图连通且 ∑ai≥(n−1)x\sum a_i\geq (n-1)x∑ai​≥(n−1)x。发现这竟然就是充要条件。首先一个很重要的结论:假如一开始 ∑ai≥(n−1)x\sum a_i\geq (n-1)x∑ai​≥(n−1)x,那么对于之后的任意时刻肯定都满足 ∑ai≥(n−1)x\sum a_i\geq (n-1)x∑ai​≥(n−1)x(连通块缩完点后)。证明最大值+最小值一定大于等于 xxx:若最大值大于等于 xxx,则证毕。若最大值小于 xxx,则所有

2021-10-19 20:40:18 6

原创 如何不重不漏地枚举一个字符串的所有本质不同子序列

给定字符串 SSS,需要实现不重不漏地枚举一个字符串的所有本质不同子序列,其中两个子序列本质不同当且仅当它们所代表的的字符串不同(即不关注下标)。考虑如何判断一个串 TTT 能否成为 SSS 的子序列,我们肯定是从前往后一位一位地用 SSS 匹配 TTT,能匹配就匹配,看最后能不能匹配完 TTT。于是对于每一个位置 iii(0≤i≤n0\leq i\leq n0≤i≤n),枚举字符 ccc,然后向 iii 后面第一次出现字符 ccc 的位置 jjj 连一条边 i→ji\to ji→j(显然建出来的图是一

2021-10-18 18:41:16 17

原创 【XSY3458】原样输出(SAM)

考虑判断一个串是否能成为输出,贪心的方法肯定是优先在第一个串的 SAM 上匹配至匹配不了,再在第二个串的 SAM 上匹配至匹配不了,……于是可以考虑通过如下方式把 nnn 个串的 SAM 拼起来:如果一个点没有 CCC 的转移边,那么就要向之后第一个包含字符 CCC 的字符串的后缀自动机接受字符串 CCC 的节点连一条 CCC 的转移边。然后询问就是拓扑排序 DP(type=0)和暴力 dfs(type=1)。#include<bits/stdc++.h>#define N 3000

2021-10-18 18:30:41 11

原创 【UOJ424】count(笛卡尔树,DP,生成函数,矩阵快速幂)

首先可以发现两个序列 A,BA,BA,B 同构当且仅当它们的笛卡尔树同构。那么可以考虑枚举笛卡尔树,然后判断它能否构成满足题目条件的序列。发现一棵笛卡尔树满足条件当且仅当它有 nnn 个节点~~(废话)~~,而且它的最长左链长度不超过 m−1m-1m−1。定义一条链的左链长度为这条链上向左的边数,一棵树的最长左链长度为这棵树所有从根到叶子的链的左链长度的最大值。那么就可以 DP 了:设 fn,mf_{n,m}fn,m​ 表示 nnn 个点、最长左链长度+1不超过 mmm 的笛卡尔树个数。这里定义状

2021-10-18 17:04:34 10

原创 【NOI2016】优秀的拆分(哈希,循环节,分段)

首先可以考虑求出 fif_ifi​ 表示结尾在第 iii 位的 AAAAAA 串的个数,gig_igi​ 表示开头在第 iii 位的 AAAAAA 串的个数。枚举 AAA 的长度 LLL,每 LLL 位放置一个关键点,那么 AAAAAA 必定经过恰好两个相邻的关键点。枚举两个相邻关键点 iii 和 i+Li+Li+L 并钦定 AAAAAA 经过这两个关键点,求出 prei,prei+Lpre_{i},pre_{i+L}prei​,prei+L​ 的最长公共后缀 l1l_1l1​ 和 sufi+1,suf

2021-10-15 22:37:40 9

原创 Burnside引理和Polya定理

Burnside 引理设 AAA 和 BBB 为有限集合,XXX 为 A→BA\to BA→B 的一个映射集合,GGG 是 AAA 上的一个置换群,X/GX/GX/G 表示置换群 GGG 作用在 XXX 上产生的所有映射的等价类的集合(若 XXX 中两个映射经过 GGG 中的置换作用后相等, 那么这两个映射属于同一个等价类),则:∣X/G∣=1∣G∣∑g∈G∣Xg∣|X/G|=\dfrac{1}{|G|}\sum_{g\in G}|X^g|∣X/G∣=∣G∣1​g∈G∑​∣Xg∣其中 Xg={x∣

2021-10-15 21:07:16 12

原创 【十二省联考2019】希望(容斥,换根DP,长链剖分,懒标记)

暴力的想法是考虑钦定每个点作为到达点并统计贡献,但显然这样会算重。注意到会算重的到达点一定构成了一个连通块,这是一个很好的性质,方便了我们容斥:我们直接用点的贡献减去边的贡献(一条边的两个端点同时是到达点)即可,因为一个连通块满足点数减边数等于 111。先考虑点的贡献,需要统计以某个点为根且深度不超过 LLL 的连通块个数。可以换根 DP:设 fu,if_{u,i}fu,i​ 表示 uuu 子树内以 uuu 为根且深度不超过 iii 的连通块个数,转移显然:fu,i=∏v(fv,i−1+1)f_{u

2021-10-15 07:29:58 7

原创 【XSY3434】【UOJ431】time map(线段树维护位运算)

首先注意到一个性质:如果我们把权值相同且相邻的点归为一个连通块的话,那么一个叶子节点往上会经过至多 O(log⁡V)O(\log V)O(logV) 个连通块(因为父亲节点一定是儿子节点的子集)。又注意到属于同一个连通块内的点,走的方向都是一样的。那么如果我们能动态维护点的权值,询问从某个点开始走时,假设它会往左走(那么在它所属的连通块内它就一直会往左走),那么我们可以二分出它往左走一直会走到哪(显然这段路上每个点的权值都是相同的,也就是说我们只需要算出这段路的长度即可知道这段路对答案的贡献),然后再跳

2021-10-14 08:17:47 16

原创 单位根反演

单位根反演就是下面这个式子:[n∣k]=1n∑i=0n−1wnik[n|k]=\frac{1}{n}\sum_{i=0}^{n-1} w_n^{ik}[n∣k]=n1​i=0∑n−1​wnik​证明:当 n∣kn|kn∣k 时,wnik=1w_n^{ik}=1wnik​=1,原式成立。当 n∤kn\not{|}kn​∣k 时,原式等于 1n⋅1−wnk1−wk=0\frac{1}{n}\cdot \frac{1-w^{nk}}{1-w^k}=0n1​⋅1−wk1−wnk​=0。应用

2021-10-13 16:24:41 8

原创 【XSY3405】零糖麦片(二分图,复杂度均衡)

一个听说很套路但我不会的套路:对于一个非 111 数 wiw_iwi​,把它看成是 (wi−1)+1(w_i-1)+1(wi​−1)+1,于是原式变为:ans=∑e1,⋯ ,et(n−t)!∏i=1t(wei−1)ans=\sum_{e_1,\cdots,e_t}(n-t)!\prod_{i=1}^{t}(w_{e_i}-1)ans=e1​,⋯,et​∑​(n−t)!i=1∏t​(wei​​−1)其中 {e1,⋯ ,et}\{e_1,\cdots,e_t\}{e1​,⋯,et​} 是 {1,⋯ ,k

2021-10-12 21:16:44 9

原创 【XSY3404】猴戏世家

法一:题解做法。不太好想。动态维护不太好做,我们考虑先把栅栏最后长什么样维护出来。扫描线,按 xxx 从大到小扫描,过程中维护当前扫描线上的一些区间,每一个区间内的点同属于一个栅栏,然后扫描到一个栅栏的时候找到它下面的第一个区间:如果这个区间对应的栅栏出现时间比当前栅栏晚,那么之后这个区间会属于当前栅栏,那么合并当前栅栏的区间和这个区间,并继续往下找;如果这个区间对应的栅栏出现时间比当前栅栏早,那么当前栅栏延伸到这个区间时就会被挡住了。于是我们就能求出最后每一个点属于哪一个栅栏,维护区间可以用 se

2021-10-11 21:55:41 15

原创 Berlekamp-Massey 算法(求数列的最短递推式)

用于求数列的最短递推式。本文参考自 https://www.cnblogs.com/jz-597/p/14983564.html。增量法,设 RiR_iRi​ 表示第 iii 个历史递推式,当前为 RcntR_{cnt}Rcnt​。设 Δ\DeltaΔ 表示真实的 aia_iai​ 与用 RcntR_{cnt}Rcnt​ 求出的 aia_iai​ 的差值,即 Δ=ai−∑j=1∣Rcnt∣ai−jRcnt,j\Delta=a_i-\sum_{j=1}^{|R_{cnt}|}a_{i-j}R_{cnt,

2021-10-11 10:34:10 35

原创 【XSY3032】画画(Burnside引理,计数)

为了方便,我们肯定是先考虑有标号图的个数,再用 Burnside 引理去重,但是用 Burnside 引理时得先考虑清楚映射集合 XXX 是哪个集合 AAA 到哪个集合 BBB 的哪些映射,以及作用在 AAA 上的置换群 GGG 是什么。首先考虑两张有标号图等价的定义:存在一个置换使得第一张图在置换作用后得到的图与第二张图完全相同,也就是说任意一条边 (u,v)(u,v)(u,v) 要么在两者中同时存在,要么在两者中同时不存在。那么自然地就能理清映射关系:XXX 是由大小为 n×(n−1)2\dfrac

2021-10-09 21:51:41 8

原创 【XSY3396】地铁(平面图与对偶图,最小割)

题意:给一张平面图,满足这张平面图的对偶图是一棵树,有若干限制,形如 “若经过点 xxx 则必须要经过点 yyy”,求 1∼n1\sim n1∼n 的最短路。由于平面图与其对偶图互为对偶,所以平面图最短路等于其对偶图上的最小割。注意这里的最小割和普通的最小割有点不一样,这里要求任意一条 S→TS\to TS→T 的路径上都只有一条割边(不然就不能对应平面图上的一条最短路),于是我们在求最小割时要给每条边加上容量为 INF 的反边。例:假设对偶图左图长这样(尽管这不是一棵树),那么我们的最小割算

2021-10-08 18:37:21 24

原创 【XSY3399】枸杞(特征多项式,二项式反演)

显然有一个暴力的想法:我们先求出 Fi,jF_{i,j}Fi,j​ 表示第 iii 张图内恰好走 jjj 步走回原地的方案数(相邻时刻位置可以相同),那么再用容斥得到答案。分为两个 Part:一是加速 Fi,jF_{i,j}Fi,j​ 的求解过程,二是加速容斥和答案的求解过程。先看第二个 Part:假设我们已经求出了所有的 Fi,jF_{i,j}Fi,j​。设 Aj=∏i=lrFi,jA_{j}=\prod_{i=l}^r F_{i,j}Aj​=∏i=lr​Fi,j​,根据二项式反演可以得到答案为:

2021-10-08 15:27:00 7

原创 【XSY3395】逃亡(概率与期望,组合数)

首先 “被经过的整点的期望个数” 不好求,我们可以把它看成 “每个整点被经过的概率的和”。对于某个整点,求 “它被任意一个人经过的概率” 不好求,我们可以求 “它不被任意一个人经过的概率”,那么现在的问题是求某个整点不被某个人经过的概率,或者说求某个整点被某个人经过的概率。把这个人看作原点,然后设这个整点的坐标为 iii(不妨设 i≥0i\geq 0i≥0,i<0i<0i<0 同理)。考虑转化到坐标-时间图像上,现在问题转化为:从原点开始走,每一步能往右上/右下走,求走 nnn 步,过

2021-10-07 17:23:49 20

原创 【XSY3367】青春野狼不做姐控偶像的梦(线段树)

题意:给一个 1∼n1\sim n1∼n 的排列,多次询问某段区间内的值域连续子区间的个数。区间值域连续的另一种表达方式:max−min=r−lmax-min=r-lmax−min=r−l,即 (max−min)−(r−l)=0(max-min)-(r-l)=0(max−min)−(r−l)=0。考虑 l=1,r=nl=1,r=nl=1,r=n 怎么做,我们对 rrr 进行扫描线,维护有多少个 lll 满足 (max−min)−(r−l)=0(max-min)-(r-l)=0(max−min)−(r−l

2021-10-04 17:00:16 17

原创 【XSY3333】魔力(差分,哈希)

”每个字符出现次数相等“ 可以使用差分简化:记录数组 scs_csc​ 为字符 ccc 的出现次数减去字符 "a"\texttt{"a"}"a" 的出现次数,那么条件等价于 sss 数组全为 000。维护 sss 数组的前缀和,那么就是要找 (i,j)(i,j)(i,j) 使得 iii 处的 sss 的前缀和和 jjj 处的 sss 的前缀和相等。哈希即可。#include<bits/stdc++.h>#define N 100010#define fi first#define

2021-10-01 23:15:57 23

原创 【XSY4191】sequence(分块,线段树)

题面sequence题解考虑把原序列每 kkk 位分成一段,然后对于每一段维护起点在这一段中的最小值。先考虑询问,对于起点在中间的整段我们直接线段树查区间最小值,现在考虑两边的小段。以左边的小段为例:(不妨假设它在第一段,在其他段是相同的)如图,红框内是我们起点的可选区域,那么蓝框内就是我们终点的选择区域。起点为 iii 的答案为 max⁡(Ai,⋯ ,Ai+k−1)\max(A_i,\cdots,A_{i+k-1})max(Ai​,⋯,Ai+k−1​),它可以分为三段:红阴影、绿阴影、蓝阴影

2021-10-01 21:53:11 19

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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