acm-数据结构
兮兮落落_
编程小白
展开
-
KMP总结详解
1. 引言 本KMP原文最初写于2年多前的2011年12月,因当时初次接触KMP,思路混乱导致写也写得混乱。所以一直想找机会重新写下KMP,但苦于一直以来对KMP的理解始终不够,故才迟迟没有修改本文。 然近期因开了个算法班,班上专门讲解数据结构、面试、算法,才再次仔细回顾了这个KMP,在综合了一些网友的理解、以及算法班的两位讲师朋友曹博、邹博的理解之后,写了9张PPT,转载 2017-08-16 16:32:40 · 202 阅读 · 0 评论 -
线段树总结详解
线段树详解By 岩之痕目录:一:综述二:原理三:递归实现四:非递归原理五:非递归实现六:线段树解题模型七:扫描线八:可持久化 (主席树)九:练习题一:综述假设有编号从1到n的n个点,每个点都存了一些信息,用[L,R]表示下标从L到R的这些点。线段树的用处就是,对编号连续的一些点进行修改或者统计操作,修改转载 2017-08-23 19:40:37 · 410 阅读 · 0 评论 -
UVA 1572 Self-Assembly
拓扑排序。题意:有n种边上带标号的正方形。每条边上的标号为一个大写字母带个‘+’号或‘-’号,或为‘00’,当两条边的字母相同且符号相反时,两条边能拼在一起,(00不能和任何边拼接),正方形有无数种,并且可以旋转和翻转,判断是否能组成一个无限大的结构。分析:只要有一条边无限长就可以。把标号看成点,(一共有A+~Z+和A-~Z-这52种),正方形看作边,构造一个有向图,进行拓扑排序,只要原创 2017-08-15 11:07:48 · 284 阅读 · 0 评论 -
uva 10129 Play on Words
判断欧拉道路。 欧拉道路的定义是: 除了起点和终点外, 其他点的出度入度相等。题意是给你很多字符串,问是否可以让这些字符串守卫相连在一起,要求其中一个的尾字母和另一个首字母相同才可连接。用一个二维数组g[ ] [ ],存储首位字母,看作边的两个结点,然后再进行判断。(因为连接时可以存在回路,所以不能单纯认为一定有两个出度入度不同的点。)用dfs来连接图,最后判断图是否全部连原创 2017-08-14 16:32:16 · 203 阅读 · 0 评论 -
uva 10562 Undraw the Trees
将一棵多叉树转换为括号表示。直接在一个二维数组里递归。一道比较水的题,但被数据给恶心到了,‘#’不可以表示结点,注意空树的处理,(第一行为空,别的能构成一棵树,这也为空树,例如{ (此行为空) a | ----- b c }代码:#include #include #include using原创 2017-08-15 09:10:05 · 187 阅读 · 0 评论 -
HDU 1879 欧拉回路
题意:判断一个图是否是欧拉回路。补充:欧拉通路: 通过图中每条边且只通过一次,并且经过每一顶点的通路。欧拉回路: 通过图中每条边且只通过一次,并且经过每一顶点的回路。 无向图是否具有欧拉通路或回路的判定:欧拉通路:图连通;图中只有0个或2个度为奇数的节点欧拉回路:图连通;图中所有节点度均为偶数 有向图是否具有欧拉通路或回路的判定:原创 2017-08-22 10:53:18 · 220 阅读 · 0 评论 -
线段树题目整合
1.hdu1166 敌兵布阵更新节点,区间求和。2.hdu1754 I Hate It更新节点,区间最值..3.hdu1698 Just a Hook成段更新,总区间求和..4.hdu1394 Minimum Inversion Number更新节点,区间求和.5.hdu1779 (这个爆炸了,别做了)成段更新,区间最值.6.pku2777转载 2017-08-24 20:07:35 · 255 阅读 · 0 评论 -
UVA - 10305 Ordering Tasks
拓扑排序模板题。bfs型代码:#include #include #include #include #include using namespace std;#define maxn 105int c[maxn], g[maxn][maxn];int topo[maxn], t, n;bool dfs(int u){ c[u] = -1; for(i原创 2017-08-14 15:05:44 · 264 阅读 · 0 评论 -
uva 1513 Movie collection
题意:有一堆电影片碟,按1-n顺序排,有m次操作,每次询问第ai个电影片碟之前有多少个,然后将其抽出放在堆顶。分析:树状数组,用一个数组记录每个编号的片碟现在所处的位置。每次移动就将这张片碟的num(位置)更新一下,将之前的num作废,以后查询也是用之后的num。代码:#include#include using namespace std;int n, m, num[1000原创 2017-08-18 15:45:34 · 200 阅读 · 0 评论 -
uva 1329 Corporative Network
题意: 有个很大的网络发展,现在有n个独立的结点。输入一串命令,如果是E u 就查询u到他的根结点的距离,如果是I u v,就让v做u的父节点,距离为u-v的绝对值模1000。分析:并查集问题,比较简单,在find函数记录a【x】的累加。代码:#include #include #include #include using namespace std;int a[2原创 2017-08-18 13:26:52 · 238 阅读 · 0 评论 -
HDU 1285 确定比赛名次
拓扑排序。结果很多种按字典序小的输出,所以用优先队列来存储。代码:#include #include #include #include using namespace std;const int maxn = 505;int n, m;int indegree[maxn] = {0}, gragh[maxn][maxn], res[maxn];vectorg[505原创 2017-08-17 21:37:45 · 136 阅读 · 0 评论 -
HDU 1698 Just a Hook
线段树模板题。代码:#include #include #include #include using namespace std; const int maxn = 1e5 + 10; int T, n, q, date[maxn], sum[maxn<<2], lazy[maxn<<2]; void init() {原创 2017-08-27 19:15:38 · 172 阅读 · 0 评论