随笔分类 - bzoj
摘要:"传送门" 考虑到这样一个性质,一个入度为0的点连一条边到一个DAG中,依然是一个DAG 于是设$f(i)$为$i$个点组成的DAG方案数, 那么$n$个节点的DAG中至少有$i$个节点入度为$0$方案数为$f(n i)\binom{n}{i}2^{i(n i)}$ 但是入度为$0$的点数为$0$时
阅读全文
摘要:"传送门" ~~dp套dp的板子题~~ 对于我这种垃圾来说:神仙题 考虑到最长公共子序列的dp做法 $dp[i][j]=max{dp[i 1][j],dp[i][j 1],dp[i 1}[j 1]+(a[i]==b[i])$ 然后发现对于一种状态,我们只需要考虑当前这个字符填的是什么就好了 那么这个
阅读全文
摘要:"传送门" 简单dp题,容易得到一个结论,填的数字一定单调不降 设$f[i][j]$表示当前是第$i$个,上一次填的数字是$j$ 对于dp转移,如果暴力转移,那么时间复杂度是$O(nk^2)$,无法通过 所以考虑记下前缀min,复杂度就可以优化到$O(nk)$ 代码: c++ include inc
阅读全文
摘要:"传送门" "%%%myy" 考虑30分做法:暴力bfs,$f[i][j]$表示$i$到$j$可以形成回文串 ~~然而为什么我场上只想到了70分做法,完全没想到30分怎么写。。~~ 100分: 考虑缩边,对于每条边分3种情况:标号同为1,标号同为0,标号不同 1、同为1:考虑如果这是个二分图,那么可
阅读全文
摘要:"传送门" 作为$HNOI2018$最简单的题,这个题确实不算难 虽然我一开始也没想出满分 看了眼题解,考虑到了倒推,这题差不多就没了 当走到叶子节点的时候考虑一下选了多少条公路翻修和多少条铁路翻修 对于非叶子节点就枚举翻修哪条边,转移就好了 一个小插曲: 本来写的记搜,由于看错题了,以为自己写错了
阅读全文
摘要:"传送门" 这真的是个很简单的树形背包,~~因为我都会写~~ 首先设$f[i][j][0/1][0/1]$表示$i$节点的子树内放了$j$个监听器,$i$点上是否放了监听器,$i$是否被监听 接下来推方程(情况有点多,但是确实好想): $son$为$i$节点的子节点集合 1、$i$节点没有被监听也没
阅读全文
摘要:"传送门" 首先设$m$为随从个数,$k$为暗影打击装甲的个数,$p$为剩余生命值,$n$为生命上限 然后考虑每个回合受到伤害,设$A_i$为每个回合被攻击$i$次的概率 $$ A_i=C^{i}_{k} (\frac{1}{m+1})^i (\frac{m}{m+1})^{k i}\\ $$ 然后
阅读全文
摘要:"传送门" 已经极其接近的想到过正确做法了,但是没想到标记永久化,所以复杂度炸了 树链剖分,对于线段树每个节点开个堆(一开始用multiset,结果MLE了,想不通为什么) 考虑对于一次请求$u,v$,只有当它的路径上的点坏掉的时候,它才会受到影响,所以除去这条路径上的所有点都应该有这个贡献 代码:
阅读全文
摘要:"传送门" 主席树裸题,考虑出现一半次数以上的数一定是这个区间的中位数,查询中位数再判断一下中位数出现的次数就好了 注意要离散化 代码: c++ include include include include using namespace std; void read(int &x) { char
阅读全文
摘要:"传送门" 二元组建图 一共有四种二元关系,对于同选文和同选理的情况需要新开两个点来计算 代码: c++ include include include include include using namespace std; void read(int &x) { char ch; bool ok
阅读全文
摘要:"传送门" 感觉这题好难呢,全程抄代码 题解就懒得写了,推出式子后暴力+剪枝。反正不是自己想的 就安利大佬的博客吧: "大佬的题解" 代码:
阅读全文
摘要:"传送门" $$ F_j=\sum_{ij}\frac{q_iq_j}{(i j)^2}\\ E_j=\frac{\sum_{ij}\frac{q_iq_j}{(i j)^2}}{q_j}\\ =\sum_{ij}\frac{q_i}{(i j)^2} $$ 然后设 $$ a_i=\frac{1}{
阅读全文
摘要:"传送门" 没想到湖南省选也出板子题啊 先把题目要求的式子拆一下 $$ \sum_{i=1}^{n}(a_i+x b_i)^2\\ =\sum_{i=1}^{n}(a_i^2+b_i^2+x^2+2a_ix 2b_ix 2a_ib_i)\\ =\sum_{i=1}^{n}(a_i^2+b_i^2)+
阅读全文
摘要:"传送门" 考虑建立圆方树,然后将圆点权值定为$ 1$(考虑到每个圆点都会被两个方点计算进去,要去重),方点权值定为点双内的点数 然后对于每个起点$s$和终点$f$,中间点的选择方案就是路径权值和,然后对于每个点为中间点计算贡献,$O(n)$dp就好了 代码: c++ include include
阅读全文
摘要:"传送门" 好题啊,就是有点难写 对于给出的图建广义圆方树,建出广义圆方树圆方树后建虚树,然后统计虚树上的点数(包括虚边上的原树的点) 注意特判$1$不为关键点时将$1$以及$1$连出去的边产生的贡献去掉 还有方点不产生贡献这个有点细节 代码(真的精神污染,没什么好看的): c++ include
阅读全文
摘要:"传送门" 不算太难,后缀数组 将所有的字符串都连起来,就是注意减$height$的时候会有一部分被多减,加回来就好了 代码: c++ include include include include using namespace std; void read(int &x) { char ch;
阅读全文
摘要:"传送门" 树上差分+线段树合并+离散化 对于修改的路径,树上差分就好了 代码: c++ include include include include include using namespace std; void read(int &x) { char ch; bool ok; for(ok
阅读全文
摘要:"传送门" 思路确实简单,很容易想到差分 差分完了之后就是一个求$n$个字符串的最长公共子串,先将所有串拼成一个串,中间加些特别大的数,为了防止差分后出现负数,也要加一个大数,这些细节自己处理下,接下来用$sa$就可以了 二分答案之后拿$height$数组判定就好了 这里说一下判定,如果出现了一个$
阅读全文
摘要:"传送门" 显然还是虚树,虚树之后树形dp 然后我没想到正确的树形dp,只想到一个错误的二次换根 写到一半发现错了,只能写了颗线段树+二次换根,线段树记的就是所有关键点到当前根的距离 写到一半又想到了正确的树形dp,然而真的不想再改了,感觉二次换根也能过: 就是每次对于当前走到的节点记一下它子树里深
阅读全文
摘要:"传送门" 二分答案是显然的啊,然后对于比二分出的值大的直接跑最大匹配,然后判定就好了 代码:
阅读全文