随笔分类 - 1-source-省选
摘要:"传送门" 做法是dfs整棵树,当访问一个点$x$时,先访问儿子,若某个时刻子树大小$\ge b$时,就把那些点放在一个省里,省会记为$x$,访问完儿子再把$x$加入栈.最后栈中剩余的没加入任何省的点加入最后一个省 (这就叫做树分块) 正确性的话,首先前面的省大小$\le 2b$,然后在最后栈中剩余
阅读全文
摘要:"传送门" qwq这题好大力 首先可以预处理出每个人到每个门前面那个格子的最早时间,然后答案如果比最小答案大的话也是合法的,所以可以二分最终答案.检查$mid$是否合法就考虑每个人要去哪个门才会合法,所以可以网络流:从原点向每个人连容量为1的边;对所有门建$mid$个点,每个点都向汇点连容量为$1$
阅读全文
摘要:"传送门" 对于题目要求的东西,考虑拆开~~懒得拆了~~ ,可以发现有$\sum x\sum y\sum x^2\sum xy$四个变量影响最终结果,考虑维护这些值 下面记$l,r$为区间两端点 首先是区间加操作,可以这样维护$$\sum(x+s)=\sum x+(r l+1)s$$$$\sum(y
阅读全文
摘要:"传送门" 强行安利 "巨佬题解" 如果只有一个点贡献答案,那么答案显然是这棵树的带权重心,这个是可以$O(n)$求的.一个$O(n^2)$暴力是枚举两个集合之间的分界边,然后对这两个集合分别算答案,合并更新 考虑优化此过程,一个结论是一棵树内,只有$size_i 2 size_{root}$的点才
阅读全文
摘要:"传送门" 推荐去 "bzoj" 看个视频了解一下 ~~不要妄想视频直接告诉你题解~~ ~~但是视频告诉了你后面要用的东西~~ 首先我们要求的是$x^2+y^2=n^2(x,y\in Z)$的$(x,y)$对数,可以转化成$x^2+y^2=n^2(x 0,y\ge0,x,y\in Z)$的$(x,y
阅读全文
摘要:"传送门" 边数只有5000,可以考虑$O(m^2)$算法,即把所有边按边权升序排序,然后依次枚举每条边$i$,从这条边开始依次加边,加到起点和终点在一个连通块为止.这个过程可以用并查集维护.那么以$i$这条边为最小边的合法路径,最大值最小的边就是最后加进去的边,这时用这两个边权更新答案即可 可以加
阅读全文
摘要:"传送门" 第一问是一道经典的二分,二分答案$ans$,然后从前往后扫,判断要分成几段救星了 第二问设$f_{i,j}$表示前$i$个数分成$j$段,每段之和不超过第一问答案的方案,转移就是从$f_{k,j 1}(k define LL long long define il inline defi
阅读全文
摘要:"传送门" 我们发现整个大置换中,会由若干形如$(a_1\rightarrow a_2,a_2\rightarrow a_3,...a_{n 1}\rightarrow a_n,a_n\rightarrow a_1)$的循环置换组成,记某个循环置换中元素个数为$m_i$而整个置换的循环节大小为$lc
阅读全文
摘要:"传送门" 考虑因为每个人的蛋糕体积要相等,如果切了一刀,那么要使得分当前蛋糕的人根据分成的两部分蛋糕的体积分成两部分人,所以假设当前有n人,切的这一刀要是在x或y的$\frac{k}{n}(k\in N_+,k\in [1,n])$处,然后两边分别有$k$和$n k$个人分,所以分治做下去救星了
阅读全文
摘要:"传送门" $n$很小,可以想到设$f_{i,j}$为第$i$轮,获得的物品集合为$j$的答案,然后顺推 恭喜你很可能会WA,因为这样可能会有些状态无法到达,而难以计算答案 概率期望是可以逆推的,那么$f_{i,j}$为第$i$轮及之前获得的物品集合为$j$,$i$后面的最大期望得分,转移就枚举每个
阅读全文
摘要:"传送门" $$\sum_{i=1}^{n}\gcd(i,n)$$ 考虑枚举所有可能的gcd,可以发现这一定是$n$的约数,当$\gcd(i,n)=x$时,$gcd(\frac{i}{x},\frac{n}{x})=1$,可以知道gcd为$x$的数的个数就是$\varphi_{\frac{n}{x}
阅读全文
摘要:"传送门" 对于每个二进制位考虑有多少区间和这一位上为1 从前往后扫每个前缀和,如果当前这个前缀和某一个二进制位上为1,因为区间和由这个前缀和减去前面的前缀和得来,如果减去了这一位为0的前缀和,那么 减去的前缀和的 比这一位更小的位 组成的数 要小于等于 当前前缀和 比这一位更小的位 组成的数,区间
阅读全文
摘要:"传送门" 可以枚举两个点然后计算答案,至于是否合法,就要看可不可以通过移不超过$t$个箱子使得两点连通,也可以看做找一条路径使得路径上的1个数不超过$t$ 所以可以考虑最短路,相邻的点两两连边,如果边的末端是1,那么边权为1,否则为0,再对每个点求单源最短路,注意初始距离为点上的数字(0/1) 最
阅读全文
摘要:"传送门" 看到免费次数$k$最多只有10,可以考虑构建$k+1$层的分层图,即每一层正常连边,上下两层对应点连边权为0的单向边,最后对所有层里面的$di_t$取$\max$救星了
阅读全文
摘要:"传送门" 代码极短 $O(n^2)$dp是设$f_{i,j,k}$表示前$i$位,放了$j$个1,后面还可以接着放$k$个0的方案,转移的话,如果放0,$k$就要减1,反之放了1,后面可以多放一个0,所以$k$加1,即$$f_{i+1,j,k 1}+=f_{i,j,k}$$$$f_{i+1,j+1
阅读全文
摘要:"传送门" 单串匹配显然用$kmp$ 一个暴力的dp是设$f_{i,j}$,表示前$i$位, 正在匹配 给定串第$j$位的方案,转移就枚举下一位放什么,然后使用$kmp$看会匹配到给定串的哪位 但是$n$非常大,注意到$f_{i,j} f_{i+1,k}$这样的转移可以抽象为一条从$j$到$k$的边
阅读全文
摘要:"传送门" 异或最大值应该是要用$trie$树,从高位往低位贪心,虽然这里询问区间的数都要加上$x$,但是仍然可以利用这个思想 从高往低位考虑,我们要找一个加上$x$后当前二进制位$j$不等于$b$的当前位的数,假设$b$当前位为0,我们就要现在找个数加上$x$后当前位$j$为1,记之前选出的数为$
阅读全文
摘要:"传送门" 要使得经过一系列移动后对角线上全是黑的,也就是要存在$n$个点,满足每行都只有一个,以及每列都只有一个,这$n$个棋子也就是所在行和所在列一一匹配 于是把题目给的矩阵当成二分图邻接矩阵,然后最大匹配救星了 cpp // luogu judger enable o2 include def
阅读全文
摘要:"传送门" 想明白了其实不难 ~~强行瞎扯~~ 这题的限制比较烦,导致了一行行转移几乎不能做(吧) 那么一列列转移呢? 设$f_{i,j,k}$表示前$i$列,取$j$个,其中第$i$列取从上往下前$k$个的答案 因为要取到一个砖块,要把该砖块上方以及右上方的先取走,那么如果这一列取$k$个,下一列
阅读全文