摘要:
二分图匹配 "P1129" 这个题还是有一定套路的 将黑色格子所在的行和列连边, 跑一边最大匹配, 如果是完美匹配即可(所有点都是匹配点) why? 在完美匹配的情况下 假如 列1 行5 , 列4 行1 ( 表示匹配) 我们则可以将行5和行1换一下位置, 这样交换 列不会受到影响, 匹配变为列1 行 阅读全文
摘要:
形式:求n个点____ 的个数 有标号无向图的个数(不一定联通): $2^{C_n^2}$ 证明显然 有标号无向联通图个数: 设g(x)为不一定联通图的个数, f(x) 为连通图个数 枚举1号点所在联通块的大小 $g(x) = \displaystyle \sum_{i=1}^{n}{n 1 \ch 阅读全文
摘要:
冒泡排序深入理解 对于冒泡排序有一个小性质: 每一次都会把序列未排好序的最大数"沉底", 即推到序列尾部 1.P4378 Out of Sorts S 留意着农场之外的长期职业生涯的可能性,奶牛Bessie开始在不同的在线编程网站上学习算法。 她到目前为止最喜欢的算法是“冒泡排序”。这是Bessie 阅读全文
摘要:
状态压缩 "P5369" 题意:求所有排列下的最大前缀和之和 一步转化: 求最大前缀和的前缀由数集S组成的方案数, 统计答案时直接乘上sum(S)即可 考虑最大前缀和的性质: 设最大前缀和为sum[i] 1. 到i的后缀均为正数 2. i后的前缀均为负数 令sum[i] = 集合 i 内所有数的和。 阅读全文
摘要:
第一眼能看出来是个dp O($n^3$) 暴力应该很好想 dp\[i][j] = $\sum_{k=1}^i [a[k] include include include using namespace std; const int N = 1005; const int P = 1e9+7; int 阅读全文
摘要:
首先进行一步转化 $a_j \leq a_i + q sqrt(abs(i j))$ $a_i + q \geq a_j + sqrt(abs(i j))$ 即 $q = max (a_j + sqrt(abs(i j))) a_i $ 我们对$i \geq j 和 j i$ 分类讨论, 其实解决一 阅读全文
摘要:
"P3943" 思维好题 接下来, 您将看到 : 差分(??!) bfs 状压dp 第一波操作(差分): d[i] = a[i] ^ a[i 1] 例子: 10011100 (0表示不亮, 1为亮了) 它的"差分"数组为 11010010 吃瓜群众: 为什么要这么表示 let's 模拟 it 原状态 阅读全文
摘要:
这个套路还是蛮常见的 思路: 将操作分为两类, 大于$\sqrt{n}$ 的, 和小于它的 为什么要这么干 考虑暴力 , 每次修改$O(1)$ , 每次查询$O(n)$ 那么它的复杂度是$O(n^2)$ 的 观察发现, 修改的复杂度远小于查询, 导致复杂度不平衡 考虑在修改时预处理以降低查询复杂度 阅读全文
摘要:
"P1502" st表 + 并查集 回顾: st表 f\[i][j] 为序列中 i ~ i + $2^j$ 1中的最大(小)值 预处理 f\[i][0] = $a_i$ , f\[i][j+1] = max(f\[i][j], f\[i + (1 include include using name 阅读全文
摘要:
介绍一个无建树做法 个人认为我的代码比较易懂(~~简直不需要注释~~) 定义dp\[x][0/1/2] 分别为x节点染绿 /红 /蓝 情况下子树中最多有几个点被染成绿色 类似的 f\[x][0/1/2] 为最少有几个点 见代码: c++ include include include using n 阅读全文