摘要: 背景: 二进制常常用来表示状态,倘若要对某种状态枚举它的子集,却不知如何处理 例如:10001001 → 10000001 即为前者子集中的元素 下面提供一种巧妙的写法: for(int i=0;i<(1<<n);i++) for(int j=i;j>=0;j=i&(j-1)){ //i为状态 - 阅读全文
posted @ 2021-03-27 16:24 咕咚咕噜 阅读(47) 评论(0) 推荐(0)
摘要: 一、图论 拓扑排序 差分约束 最短路 欧拉回路* tarjan算法 二分图(匈牙利算法/KM算法)* Dinic算法-网络流/费用流* 2-SAT 带花树* 分数规划* 矩阵树定理 二、数学 费马小定理、欧拉定理 素数筛法 辗转相除法、拓展欧几里得、中国剩余定理 容斥原理 Lucas定理 BSGS算 阅读全文
posted @ 2021-03-24 21:37 咕咚咕噜 阅读(66) 评论(0) 推荐(0)
摘要: 最长上升子序列 II 时间复杂度:n*log(n) 优化思路:维护一个单调队列,q[i]存储的是所有长度为i的上升子序列的最小末尾元素,进而应用二分进行优化 #include<iostream>//其实本质就是维护一个单调队列,对于相同长度的上升子序列,末尾元素小的总是更优 using namesp 阅读全文
posted @ 2021-03-23 17:09 咕咚咕噜 阅读(58) 评论(0) 推荐(0)
摘要: 一、核心思想 定义必胜状态为先手必胜的状态,必败状态为先手必败的状态 关键定理: 定理1:没有后继状态的状态是必败状态。 定理2:一个状态是必胜状态当且仅当存在至少一个必败状态为它的后继状态。 定理3:一个状态是必败状态当且仅当它的所有后继状态均为必胜状态。 Nim和 定义Nim和=\(a_{1}\ 阅读全文
posted @ 2021-03-20 14:55 咕咚咕噜 阅读(197) 评论(0) 推荐(0)
摘要: 一、基本思想 基环树是一种非常特殊的结构,主要构成为n个点n条边 基环树的结构其实很简单,但比树还是要复杂一些。经典题型一般为求基环树的直径,基环树两点之间的距离,基环树动态规划等。而求解基环树相关问题的方法通常是先找出基环树上的环,单独处理换上连接的若干棵子树,再考虑与环一起计算。当然,也可以采取 阅读全文
posted @ 2021-03-14 16:10 咕咚咕噜 阅读(150) 评论(0) 推荐(1)