平衡树
摘要:
二叉查找树 满足: 1.空树是二叉搜索树; 2.若二叉搜索树的左子树不为空,则其左子树上所有点的附加权值均小于其根节点的值; 3.若二叉搜索树的右子树不为空,则其右子树上所有点的附加权值均大于其根节点的值; 4.二叉搜索树的左右子树均为二叉搜索树. 平衡树的实现 例:P3369 【模板】普通平衡树
题解:P10945 Place the Robots
摘要:
P10945 Place the Robots 对于本题,我们都可以想到车的放置(即是放置车使得每个车两两不攻击),此题我们的做法是二分图匹配. 因此本题我们自然而然地就有往这个方面想的思路,但是我们必须要处理墙的这个问题,即使一些机器人同时在一列,但是他们中间却有一堵墙,也不会互相伤害. 所以我们
莫队
摘要:
普通莫队 本质上是离线+分块+暴力. 我们把区间分块,所在点的左端点的块的序号为第一关键字,右端点为第二关键字. 例:查找区间内出现偶数个数的数的数量. #include<bits/stdc++.h> using namespace std; const int N=1e5+10; int read
题解:P3529 [POI 2011] PRO-Programming Contest
摘要:
P3529 [POI 2011] PRO-Programming Contest 对于这个题,我们首先想到的是: 将源点向选手连边,容量为 ,表示所给时间内能做的最多题. 选手再向会做的题目连边,容量为 \(1\
网络流
摘要:
最大流 选用Dinic算法,一定注意idx的初始化为 . #include<bits/stdc++.h> #define int long long using namespace std; const int N=1e4+10; int n,m,s,t,idx=1,head[N],cu
并查集
摘要:
非常简单的数据结构,一定要注意初始化并查集. 初始化代码. for(int i=1;i<=n;i++) fa[i]=i; 查询合并代码. int fa[N],n; int find(int x){ if(fa[x]==x) return x; return fa[x]=find(fa[x]); }
简单动态规划
摘要:
对于一个可以用动态规划实现的题目来说我们需要有以下步骤: 1.将原来划分为若干个阶段,每个阶段对应若干个子问题,提取子问题的特征(称为状态). 2.找到每个状态下可能得决策或者是各个状态的转移方式(就是寻找状态转移方程式). 3.按顺序求解每个阶段问题. 基础动态规划问题 最长公共子序列 给定一个长
最小生成树
摘要:
定义:在无向连通图中边权和最小的生成树为最小生成树.生成树的定义是在一个无向图中包含所有节点且边数最少的连通子图. Kruskal算法 考虑一种贪心,我们将边权从小到大排列,依次将边加入生成树中,如果此次加边形成了环,则扔掉这条边. 我们可以轻易证明此贪心的正确性,若在某次加入中此条边不是最小生成树