随笔分类 - bzoj
摘要:"传送门" 暴力啊,直接树套树上啊 线段树套splay,卡卡常就直接A了 代码:
阅读全文
摘要:"传送门" 考虑每次交换都不会改变每个数所在的行和列(不是指编号,而是指和它在同一行或者同一列的数不会发生变化) 由于每个数互不相同,所以记录下每个数所在的行和列,暴力判断就好了 代码: c++ include include include include using namespace std;
阅读全文
摘要:"传送门" 普通数位dp 代码: c++ include include include include include using namespace std; void read(int &x) { char ch; bool ok; for(ok=0,ch=getchar(); !isdigi
阅读全文
摘要:"传送门" 状压dp 考虑某些店可以不走,所以做的时候记个前缀min就好了 代码: c++ include include include include using namespace std; void read(int &x) { char ch; bool ok; for(ok=0,ch=g
阅读全文
摘要:"传送门" 显然可以发现把$k$状压 显然可以发现三维的dp,$f[i][j][k]$代表当前到$i$,已经连了$j$条边,当前$i\ to\ i k$奇偶性为$k$,然而会重复算 所以再加一维$t$,表示上一次连的边为$i i k+c$ 代码:
阅读全文
摘要:"传送门" 设状态$f[i][j][k]$为枚举到第$i$行,放国王的状态为$j$,目前一共放了$k$个国王 算出来复杂度挺高的,但是剪枝比较niubi,然后就没了 代码: c++ include include include include using namespace std; void r
阅读全文
摘要:"传送门" 神仙题吧,很有东西 看了题解才会做的 先提取有用信息: 1、这个密室是一棵有n个节点的完全二叉树 2、在点灯的过程中,要保证任意时刻所有被点亮的灯泡必须连通 3、在点亮一个灯泡后必须先点亮其子树所有灯泡才能点亮其他灯泡 所以get到信息 1、树高严格$logn$ 2、点亮的灯泡组成一个联
阅读全文
摘要:"传送门" 我一开始想的是考虑每个点的颜色 设的状态就是$f[i][j]$表示$i$子树里有$j$个黑点的$i$子树的收益最大值,后来发现无法转移 那么考虑答案的统计,可以对于边统计答案 那么我们就可以考虑$f[i][j]$为$i$子树里有$j$个黑点对于全局答案的贡献最大值 也就是对于边考虑统计答
阅读全文
摘要:"传送门" 树形dp 对于每个点维护其子节点的走法是否唯一,每次取最大的并且不为负的(停留次数 1)个子儿子权值,然后判断走法是否唯一 假如有子节点的权值为0,走法也不唯一 代码: c++ include include include include include using namespace
阅读全文
摘要:"传送门" 简单树形dp 设$f[i][j]$为当前为$i$号节点,当前颜色是$j$ 转移枚举一下子节点颜色,判断一下就好了 代码:
阅读全文
摘要:"传送门" 二进制分组优化背包 理解的差不多了,但是无法具体阐述,留坑 代码:
阅读全文
摘要:"传送门" 背包,想到一个思路这个题就没了,还是很简单的 将物品按$a_i$从小到大排序,询问按$m$从小到大排序,限制一下$a_i$,最大化$b_i$的最小值就没了 代码: c++ include include include using namespace std; void read(int
阅读全文
摘要:"传送门" 简单背包,本来sb了,写的一维数组,后来发现会影响后面的,改成二维就好了 wa的代码给出来: c++ include include include include using namespace std; void read(int &x) { char ch; bool ok; fo
阅读全文
摘要:"传送门" sb背包,先做一遍背包,然后考虑每个物品不用造成的影响 代码: c++ include int n,m,f[2001],a[2001],g[2001]; int main() { scanf("%d%d",&n,&m); for(int i=1;i=a[i];j )(f[j]+=f[j
阅读全文
摘要:"传送门" 首先知道每段$[i,i+1]$都能提供p1的贡献,预先加上就行了 然后的区间都是3个以上的了 对于p1的贡献,可以考虑中间的数$i$,设$l[i]$为左边第一个大于它的数的位置,$r[i]$为右边第一个大于它的数的位置,对于每一个$l[i]$和$r[i]$可以发现贡献是p1 对于p2的贡
阅读全文
摘要:"传送门" 显然是求生成树 只有两种情况会导致no solution: 1、如何加边图都不连通 2、必须要加的鹅卵石边超过k条 首先可以一遍kruskal判断出必须要加的鹅卵石边是多少:优先加水泥路的边 然后将必须要加的鹅卵石边加上去,再多加几条边使鹅卵石边等于k条,再去加水泥路 最后判断图是否联通
阅读全文
摘要:"传送门" 很容易看出是虚树吧,难点在于统计答案 可以考虑将虚树上的点预处理出来是由哪些关键点控制的 可以两次dfs初步处理一下(考虑下对上的影响和上对下的影响,但是兄弟节点之间的关系更新不到,需要在统计答案时更新一下) 然后考虑统计答案 考虑每个点$u$不在虚树中的儿子$v$,记它为size[v]
阅读全文
摘要:"传送门" 解法一:后缀数组 T=0,就是求本质不同,后缀数组经典用法 T=1,二分解决 代码: 解法二:后缀自动机 后缀数组做这个题显然有些强人所难 所以我们用后缀自动机可以更简单的解决 我们知道后缀自动机可以$O(n)$求出每个子串的出现次数和不同字串的个数 将这两者同意一下就可以满足这个题目的
阅读全文
摘要:"传送门" 最小割,割点,模板。。。 代码: c++ include include include include include using namespace std; void read(int &x) { char ch; bool ok; for(ok=0,ch=getchar(); !
阅读全文
摘要:"传送门" AC自动机也可以写的啊,就是判断多了点,思路和KMP的挺像的 "具体的可以参考一下这一篇" 然后贴一个代码: c++ include include include include include include using namespace std; void read(int &x
阅读全文

浙公网安备 33010602011771号