SDOI知识点大复习
来源:互联网 发布:免费发光字制作软件 编辑:程序博客网 时间:2024/06/05 03:45
马上就要考一轮了,也该复习一下模板了,把以前的题整理一下,再做一些经典题吧。
数据结构类问题
线段树、树状数组:
1、维护序列上的某些操作,难点主要在merge操作(区间加法)怎么写,当然也可以搬到树上和仙人掌上。
一般支持修改、查询操作。
例:bzoj1018、4034、3306、4094、3529
2、利用问题自身的性质,用一些奇怪的复杂度分析来解决一些问题。
这种问题一般是比较难的,在考场上只能依靠做过的题目来想。
例:
bzoj3672、3533:线段树维护凸包,只能维护在最后插入的操作,不能维护在中间修改的操作(树套树)。
每次询问的时候再暴力对每个节点建凸包,因为线段树每一层总共有n个点,一共log n层,加上暴力建凸包的复杂度,是O(n log^2 n)的。
bzoj4127:因为每个数只会由负变正一次,所以每个节点维护一下负数的最大值。
如果加上这个数会变正,那么暴力修改,否则直接打标记做。
bzoj3165:对x轴建一棵线段树,然后记一个数组记录边界情况。
修改的时候,每个节点可能被分成多个部分,新加入的线段如果完全覆盖,那么就把标记改成这条线段。
否则,判断两条直线的交点,位于左儿子还是右儿子,向左或者向右更新儿子节点。
修改的复杂度是O(nlog^2n)的,比较难想的算法。
bzoj3747、2743:经典做法,如果要求区间内重复的数只算一次,一般都是预处理出pre数组来做。
bzoj3514:同上题,联通块个数=总点数-有贡献的边数。
3、枚举+线段树/树状数组快速统计,花式计数问题,通常算作乱搞题。
例:
bzoj2441:自己想了个麻烦做法,感觉自己考试的时候的想法都好奇怪。
bzoj1818:现在想想还挺恐怖,只有第一秒会有白变黑,同行同列形成成若干条线段,枚举横向的线段,每碰到纵向线段的下端点对应的位置就+1,碰到上端点就-1,每遇到一个横向的线段统计两个端点之间位置的和,树状数组维护。
4、线段树/主席树优化图论建图
从一个点向一个区间中的每个点连边,边数级别可能很大,这时候用线段树来做,每个点只需要向log n个线段树上的节点连边,总边数降低,应用于最短路和网络流?
例:bzoj4276、3218
5、线段树按时间分治(好像是这么叫吧)
这类问题通常有插入和删除两种操作,因为删除操作比较难处理,所以离线记录一下每个点出现的时刻,对应插到线段树的节点中,然后从根节点dfs一遍,每个叶子节点对应着一个时刻。
例:bzoj4311、4184
6、优化dp
一般是查询区间最大值,如果是前缀或后缀最大值的话,树状数组也可以。
例:bzoj3594、1537、3790
平衡树、set:
1、维护序列操作
一般以数组下标为关键字建平衡树,支持插入、删除操作,难点同样在于标记的打法以及如何合并两个节点的信息。
例:bzoj1862、1552、2329、1861、1500
2、link-cut-tree
lct太让人头疼了,考试应该很少考了吧。
例:bzoj2594、3514
3、set
set是平衡树的简化版本,只支持插入一个数,查询前驱、后继、最大、最小,以及删除一个数,自带去重。
例:bzoj2342、1492、2300
主席树:
1、二维数据结构,查询区间内一个权值在[L,R]之间的数的个数(或者其它),配合树状数组,支持修改操作
例:bzoj3295、2141、3439
堆、单调队列、单调栈:
1、优化dp
例:bzoj1758、3675
2、贪心
例:bzoj2802
3、统计问题
例:bzoj3238、2096、3316
并查集:
1、维护图的连通性
例:bzoj1821、1202
2、快速查找下一个位置
例:bzoj3910、2054、1098
分块:
例:bzoj3343、4241、4028
离线算法:
整体二分、cdq分治、莫队算法
讲道理,这三个算法没有什么太大的用处吧,还是比较奇怪的离线算法比较多。
图论
最短路:
1、最短路裸题
通常使用spfa和dijkstra算法,后者比较稳定,前者适用于更多的情况。
还有一种floyd算法,通常用作倍增一类的题目。
例:bzoj1003、1641、2709、1266、1295、2100、2019
2、分层图最短路
把图分成若干层,每一层之间的连边是类似的,两层之间连一些特殊的边,可以类比二维dp的转移。
写代码的时候不要直接把两层之间的边建出来,这样会快一些。
例:bzoj2763、2834、3245
3、最短路建模:
差分约束:给定一系列ai>=aj+d或ai<=aj+d的不等式,让你最小化或最大化一个数。
因为这类问题符合最短路或最长路的约束条件,所以可以用最短路解决。
先根据最后要求的答案判断应该跑最长路还是最短路,再建图。
例:bzoj1731、3373、3436
其它比较灵活的建模
例:bzoj4152、2118、1922
生成树问题:
最小生成树,好吧,只做过模板题
生成树定理,好吧,只做过模板题
强连通分量、拓扑排序:
貌似这都是NOIP内容吧,要是考的话一定是神题。
二分图匹配:
掌握几个二分图的基本性质:
二分图的最小点覆盖=最大匹配
二分图的最小边覆盖=二分图总点数-最大匹配
二分图的最大独立集=二分图总点数-最小点覆盖
剩下的网络流其实也可以解决。
网络流:
最大流
最大流通常是用作二分答案后的判断方式,一般很少单独考了。
例:bzoj3130、1458、1305、2929、1711、1738、1570、3504
最小割
最常见的模型就是最大权闭合子图了。
例:bzoj3438、1342、2400、2127、2039、2561
费用流
在满足最大流的前提下,满足最小/大费用,建模时,最大流可以体现一个条件。
例:bzoj3308、2597、1283、1449
上下界网络流
主要是建图来算比较麻烦,记住怎么算就好。
最大流就是在T到S加一条容量上界为inf,下界为x的边,其中x是二分的答案,每次判断可行流。
最小流就是在S到T加一条容量上界为x,下界为0的边,其中x是二分的答案,每次判断可行流。
或者
最大流就是在T到S加一条容量上界为inf,下界为0的边,求从SS到TT的最大流,然后再求一遍S到T的最大流,答案为两次的和。
最小流就是先正常求一遍SS到TT的最大流,然后加上T到S上界为inf,下界为0的边,求SS到TT的最大流,答案为新加的边流过的流量。
例:bzoj2055、2502、3876、4200
- SDOI知识点大复习
- 复习知识点
- 知识点复习
- 知识点复习
- Android面试准备复习之Android知识点大扫描
- Android面试准备复习之Android知识点大扫描 .
- Android面试准备复习之Android知识点大扫描 .
- Android面试准备复习之Android知识点大扫描
- Android面试准备复习之Android知识点大扫描
- Android面试准备复习之Android知识点大扫描 .
- SDOI
- SDOI
- SDOI
- 办公自动化知识点复习
- struts知识点复习
- Orcale 复习知识点
- Android面试复习知识点
- 复习本周知识点
- jquery datatable
- [Android]Intent的使用
- 中文Windows下用Python修改MAC地址
- refDemo
- 18--26 面向对象程序设计24(深入解析原型继承的概念)
- SDOI知识点大复习
- c++实现快排。。下午补充
- MFC Edit控件之enter回车捕捉
- EditText的光标在中间的问题
- 《第一行代码》中失效内容的替换
- Java中的static关键字解析
- android仿qq实现自定义拍照界面CameraView
- js note
- 虚拟机virtualBox 搭建 Keepalived+lvs dr+httpd 负载均衡