08 2018 档案
摘要:最小生成树算法 Kruskal+并查集 O(ElogE)
阅读全文
摘要:一、最小生成树 在无向图中,连通且不含圈的图称为树(Tree)。给定无向图G=(V,E),连接G中所有点,且边集是E的子集的树称为G的生成树(Spanning Tree),而权值最小的生成树称为最小生成树(Minning Spanning Tree,MST)。 二、Kruskal 步骤: 1、将所有
阅读全文
摘要:介绍: 是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权(但不可存在负权回路)的最短路径问题,同时也被用于计算有向图的传递闭包。 Floyd-Warshall算法的时间复杂度是O(N3),空间复杂度O(N2)。 原理: Floyd-Warshall算法的原理是动态规划。 用fk(i,j
阅读全文
摘要:单源最短路 Dijkstra + 邻接矩阵 O(V2 + E) Dijkstra + STL priority_queue + 链式前向星 O((V + E)lgV) Dijkstra + STL priority_queue + 邻接表 O((V + E)lgV) Bellman-Ford O(V
阅读全文
摘要:一、Bellman-Ford Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(当然也可以是无向图)。与Dijkstra相比的优点是,也适合存在负权的图。 若存在最短路(不含负环时),可用Bellman-Ford求出,若最短路不存在时,Bellman-Ford只能用来判断是否存在
阅读全文
摘要:一、介绍 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他各个节点的最短路径。 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。 适用于有向图和无向图,但不能有边权为负的情况。 二、基本思想 通过Dijkstra计算图G中的最短路径时,需
阅读全文
摘要:一、题目, 输入一个树状数组,根据力矩相等原则判断是否平衡。采用递归方式输入(先序):每个天平的格式为Wl, Dl ,Wr ,Dr,当Wl或Wr为0时, 表示该“砝码”实际是一个子天平,接下来会描述这个子天平。 当Wl = Wr = 0时,会先描述左子天平,再描述右子天平。 二、解题思路 题目的输入
阅读全文
摘要:一、二叉树的定义 二叉树(Binary Tree)的递归定义:二叉树要么为空,要么由根节点(root)、左子树(left subtree)和右子树(right subtree)组成,而左子书和右子树分别是一颗二叉树。注意,在计算机中,树一般是"倒置"的,即根在上,叶子在下。 二、二叉树的层次遍历 三
阅读全文
摘要:一、一次同余式的概念 通常,我们把含有未知数的同余式叫做同余式方程。 一类形式最简单的同余方程是一次同余方程,一般形式为ax≡b(mod n),其中n为正整数,a,b为整数且a不为0. 二、一次同余方程的解的情况 1、是否有解 2、有多少解 3、有解的情况下如何描述解 1º 先讨论特殊情况,即(a,
阅读全文
摘要:一、有关剩余类 定义1:从模n的每个剩余类中各取一个代表元,得到一个由n个数组成的集合,叫做模n的一个剩余类。 定义2:用φ(n)表示从1,2,...,n中与n互素的整数的个数。 定义3:从模n的每个互素剩余类中各取一个代表元,得到一个由φ(n)个元素组成的集合,叫做模n的简化剩余类。 定理1:设n
阅读全文
摘要:一、问题描述 有一个n(n<=10000)个节点的无根树。有两种装置A,B,每种都有无限多个。 1.在某个节点X使用A装置需要C1(C1<=1000)的花费,并且此时与节点X相连的边都被覆盖 2.在某个节点X使用B装置需要C2(C2<=1000)的花费,并且此时与节点X相连的边以及与节点X相连的点相
阅读全文
摘要:一、问题描述 给出一棵n个节点的树,统计树中长度为k的路径的条数(1<=n<=50000 , 1<=k<=500)。 二、解题思路 设d[i][k]表示以i为根节点长度为k的路径数目 三、代码实现
阅读全文
摘要:一、问题描述(题目链接) 给你一棵树,删除或添加一条边的费用都是1,问使它变成一个环的最小费用。 二、解题思路 回溯法,然后回溯的时候的当前节点度数>2(如果是成环的话肯定就是2或者小于2)就把它和父节点之间的边砍掉。每砍掉一次,以后是要连上的,只需乘2就行。由于是回溯回来的,父节点在子节点阶段就考
阅读全文
摘要:一、问题描述(题目链接) 有n个门和m个开关,每个开关可以控制任意多的门,每个门严格的只有两个开关控制,问能否通过操作某些开关使得所有门都打开。(给出门的初始状态)。 二、问题分析 大部分开关问题首先要想到的一点就是任何开关操作两次以上都是无意义的,因此对于每个开关,我们要么操作一次,要么不操作。
阅读全文
摘要:一、问题描述(题目链接) 有n种化合物,每种化合物由两种元素组成。当几种的化合物数量等于他们所含不同元素的数量时,就会发生爆炸。现在依次给出化合物的组成,当新的化合物与之前的化合物放在一起会发生爆炸时,就不能允许这个化合物放进来。输出拒绝的次数。 二、问题分析 把元素看成点,化合物看成边,每次新的化
阅读全文
摘要:一、题目描述(题目链接) 给定一个序列,按指定的顺序逐一删掉,求连续子序列和的最大值。例如序列1 3 2 5,按3 4 1 2的顺序删除,即依次删除第3个、第4个、第1个、第2个,答案为5 4 3 0。 二、问题分析 我们知道从并查集中删除元素很难,而合并非常简单。所以我们可以反过来思考,正向删除元
阅读全文
摘要:一、问题描述 题目链接 有n个节点(1≤n≤100000),进行如下两种操作: (1) M a b, 把a、b合并 (2)S a, 把a分离出来 进行M(1≤M≤1000000)次操作,问最后有几个组? 二、解题思路 用并查集来实现,我们都知道并查集的合并操作很容易实现,而从集合中移出一个元素却很难
阅读全文
摘要:一、什么是并查集? 并查集是一种用来管理元素分类的情况的数据结构,并查集可以高效的进行如下操作: 查询元素a和b是否属于同一组 合并元素a和元素b所在的组 但不方便进行分割操作 二、并查集的结构 并查集也是使用树形结构实现的,不过,不是二叉树 每个元素对应一个节点,每个组对应一棵树。在并查集中哪个节
阅读全文
摘要:一、题目描述 某城市有一个火车站,有n节车厢从A方向驶入车站,按进站顺序编号为1~n,经中转站C驶向B。中转站C,这是一个可以停放任意多节车厢的车站,但由于末端封顶,驶入C的车厢必须以相反的顺序驶出C。你的任务是判断它能否按某种顺序进入B方向的车站。 二、解题思路 中转站C就相当于一个栈,可以随时入
阅读全文
摘要:一、问题描述 有1元、5元、10元、50元、100元、500元的硬币各C1、C5、C10、C50、C100、C500枚。现要用这些硬币来支付A元,最少需要多少枚硬币?假设本题最少存在一种支付方案。(0 ≤ C1、C5、C10、C50、C100、C500 ≤ 109,0 ≤ A ≤ 109 ) 二、问
阅读全文
摘要:一、问题引入 有一根长度为L(L < 1000)的木棍,还有n(n < 50)个切割点的位置(按照从小到大排列)。你的任务是在这些切割点的位置处把棍子切成n+1份,使得总费用最小。每次切割的费用等于被切割的木棍长度。 二、问题分析 这个问题很像前面的栅栏维修(给定n个木棍的长度,切割点任意),这道题
阅读全文
摘要:一、问题引入 农夫约翰为了修理栅栏,要将一块很长的木块切成N块。准备切成的长度分别是L1、L2、、、,LN,未切割前的木板长度切好为切割后木板长度的总和。每次切断木板时的开销是这块木板的长度。(1 ≤ N ≤ 20000,0 ≤ Li ≤ 50000) 二、解题思路 由于N的值非常大,不可能枚举所有
阅读全文
摘要:一、题目描述 你需要驾驶一辆卡车行驶L单位距离。最开始时,卡车上有P单位的汽油。卡车每开1单位距离需要消耗1单位的汽油。如果在途中车上的汽油耗尽,卡车就无法继续前行,因而无法到达终点。中途共有N个加油站,第i个加油站距离终点Ai单位距离,最多可以给卡车加Bi单位汽油。假设卡车的燃料箱的容量是无限大的
阅读全文
摘要:一、问题描述 将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割了(n-1)次后,连同最后剩下的矩形棋盘共有n块矩形棋盘。(每次切割都只能沿着棋盘格子的边进行) 原棋盘上每一格有一个分值(小于100的非负整数),一块矩形棋盘的总分为其所含
阅读全文
摘要:一、问题描述 物品无限的背包问题:有n种物品,每种均有无穷多个。第 i 种物品的体积为Vi,重量为Wi。选一些物品装到一个容量为 C 的背包中,求使得背包内物品总体积不超过C的前提下重量的最大值。1≤n≤100, 1≤Vi≤C≤10000, 1≤Wi≤1000000. 二、解题思路 我们可以先求体积
阅读全文
摘要:一、问题描述 有n种硬币,面值分别为V1,V2,V3,...,Vn,每种都有无限多。给定非负整数S,可以选用多少硬币,使得面值之和恰好为S?输出硬币数目的最小值和最大值。1≤n≤100,0≤S≤10000,1≤Vi≤S. 二、解题思路 将每种面值看作一个点,表示“还需凑足的面值”,则初始状态为S,目
阅读全文
摘要:一、DAG的介绍 Directed Acyclic Graph,简称DAG,即有向无环图,有向说明有方向,无环表示不能直接或间接的指向自己。 摘录:有向无环图的动态规划是学习动态规划的基础,很多问题都可以转化为DAG上的最长路、最短路或路径计数问题。 通常需要建图,不复杂的也可以当最长上升子序列处理
阅读全文
摘要:一、问题 有一个长为n的数列 a0,a1,a2...,an-1a。请求出这个序列中最长的上升子序列的长度和对应的子序列。上升子序列指的是对任意的i < j都满足ai < aj的子序列。 二、思路 如果i < j且ai < aj则认为ai到aj存在有向边,由于一个数不可能直接或间接的指向自己,所以是一
阅读全文
摘要:一、题目 某城市的地铁是线性的,有n(2 ≤ n ≤ 50)个车站,从左到右编号为1~n。有M1辆车从第一站开始往右开,还有M2辆从第n站开始往左开。在时刻0,Mario从第一站出发,目的是在T时刻会见在n站的一个间谍。要求其在车站的等待时间足够短。 二、解题思路 状态由当前时间和当前所在站决定,我
阅读全文
摘要:一、题目 给一个m行n列(m <= 10,n <= 100)的整数矩阵,从第一列任何位置出发每次往右、右下、右上走一格,最终达到最后一列。要求经过的整数之和最小。整个矩阵是环形的,即第一行的上一行是最后一行,最后一行的下一行是第一行。输路径上每一列的行号及路径上的整数和,多解时输出字典序最小的。 二
阅读全文