摘要:
bitset是C++中的一个东西,定义在头文件#include<bitset>里 所以可以使用#include<bitset>解决取数类的问题https://www.nowcoder.com/acm/contest/1/D 阅读全文
摘要:
树状数组的高效性主要就是通过将一条线段分成若干个小线段(其中每个小线段存储着2^k大小的区间和,这就将区间和问题复杂度降到了logn),而不是一个一个单一的点 add()操作修改了单点的值,同时对之后的父亲节点进行了更新(之所以只更新该点以及该点的父亲节点而不更新该点的非父亲节点,是因为求和时父亲节 阅读全文
摘要:
h杭电oj1198http://acm.hdu.edu.cn/showproblem.php?pid=1198(一道搜索题) 题目的管道接口对应关系如果不使用数组进行对应,而是选择手工进行情况分类对应,代码量会比较大,而且容易出错,如下 不使用数组的代码量 使用数组进行对应关系之后的代码量 阅读全文
摘要:
杭电oj1272http://acm.hdu.edu.cn/showproblem.php?pid=1272 判断方法,在建立两点之间的边时应查询它们的根节点是否相同,如果相同就是有环的,否则无环 阅读全文
摘要:
有向图的合并,典型问题:通知小弟(信息只能单向传播)https://www.nowcoder.com/acm/contest/76/E 无向图的合并,典型问题:修道路问题 由于无向图只要二者有联系即可(即不需要分清是谁触发谁,也就无所谓父亲节点与儿子节点、孙子节点...),所以只需要建立一个并查集就 阅读全文
摘要:
首先由于加入到队列中的数据的值将不能改变,而有些点的最短距离更新时,还留在队列中的该点仍是该点更新之前的值,而此时的值已经成为了垃圾值(因为它已经不是该点的最短距离了,弹出之后更新的周围的点也不是最短距离)所以对于某些最短距离已经更新的点,再使用更新之前的点的值进行更新其他点是没必要的,这时就需要通 阅读全文
摘要:
回顾一下dfs与bfs的使用,由于二者都需要避免走重复的路,所以二者都需要对数组进行标记 而二者的标记操作的不同点是 dfs会对数组的标记进行清除(包含两种标记,一种对形参变量的标记,这个清除是返回上一层时自动清除,另一种是对全局变量的标记,这个清除是要手动进行,在上一个dfs()中上面进行标记,在 阅读全文
摘要:
https://www.nowcoder.com/acm/contest/77/A 简单的树状数组 具体操作c[100005]用于记录区间内已经出现数字的个数,用add()更新区间内已经出现的数字个数,用sum()来求出该数出现之前的数字个数之和 阅读全文
摘要:
之前水过一道极水的道路建设问题,就是判断最少还需要建设多少条公路能使全部城市都直接或间接相连 首先要知道直接或间接相连的道路最少是n-1条(如果一共有n个城市不相连),那么解决上述问题就是直接通过并查集来看已经有多少个城市相连了 如果知道上述n个城市需要n-1条路的性质,那么就很容易判断某些需要判断 阅读全文
摘要:
树状数组的关键就是三个函数:(主要是利用树状数组与二进制之间的性质进行跳跃式的操作(具体性质百度即可)) https://www.nowcoder.com/acm/contest/77/B 1、int lowbit(int x); 2、void add(int x,int y); 3、int sum 阅读全文