题目链接:https://vjudge.net/problem/HDU-4027 主要题意:区间开方,区间求和 #include <cstdio> #include <cmath> #include <algorithm> #include <cstring> using namespace std; const int N = 1e5 + 100; int n, m; int bl[N]; long long blo; long long sum
作者: _Redstone_c_
定义 连通图:任意两个顶点vi与vj都有路径相通。 强连通图:任意两个顶点vi与vj都有路径相通。 连通图:图的边具有一定的意义,每一条变都有对应着一个权。 生成树:一个连通图的生成树是指一个连通子图,它含有图中全部n个顶点。 最小生成树:建立生成树且所花费的权最少。 PS:如果生成树中再添加一条边,则必定成环。 最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法求出。 贪心算法: 每一步都要最好的,权重最小的边。 需要的约束: 智能用图里有的边。 智能正好用掉|v|-1条
前向星是一种特殊的边集数组,我们把边集数组中的每一条边按照起点从小到大排序,如果起点相同就按照终点从小到大排序, 并记录下以某个点为起点的所有边在数组中的起始位置和存储长度,那么前向星就构造好了.
与 1 and 1 = 1 0 and 1 = 0 1 and 0 = 0 0 and 0 = 0 或 1 or 1 = 1 0 or 1 = 1 1 or 0 = 1 0 or 0 = 0 异或[相同为0,不同为1] 1 xor 1 = 0 1 xor 0 = 1 0 xor 1 = 1 0 xor 0 = 0
基本解法 \Omicron(N^2) 譬如给定 2 个序列: 1 2 3 4 5 3 2 1 4 5 试求出最长的公共子序列。 显然长度是 3 ,包含 3 4 5 三个元素(不唯一) 我们可以用 dp[i][j] 来表示第一个串的前 i 位,第二个串的前 j 位的 LCS 的长度, 那么很容易想到状态转移方程: 如果当前的 A1[i]A1[i]A1[i] 和 A2[j]A2[j]A2[j] 相同(即是有新的公共元素),那么 dp[i][j] = \max(dp[i][j], dp[i − 1][
可以将有序数列中的查找操作的时间复杂度优化到log N级别 数列为T获取查找部分的开头下标[start]和结束下标[end]以及要查找的数[x] 计算中间平分点下标[mid],即start和end的平均数
基础解法[O(N^2)] T为输入的序列,F为以第i个数结尾的最长上升子序列长度 可得到F[i]等于F[0 …… i – 1]中满足T[i] > T[0 …… i – 1]的数 例如序列T = {1, 5, 6, 4, 2, 9} 对应的F = {1, 2, 3, 2, 2, 4} F序列中最大的数即为最长上升子序列
1. 在关系数据库中,存放在数据库中的数据的逻辑结构以二维表为主。 2. ASCII 码的含义是美国信息交换标准代码。 3. 不存在一种算法,对任何一个程序及相应的输入数据,都可以判断是否会出现死循环,因而, 任何编译系统都不做死循环检验 。 4. ∧ = and丶∨ = or 丶 ¬ = 取反。
用于快速查找某个点在哪个集合中,常用于有关图的题中,可查看洛谷 P3367 题。 #include <cstdio> #define _for(i, n) for(int i = 0; i < n; i++) using namespace std; const int MAXN = 1e6 + 100; int m, n, o, x, y; int map[MAXN]; int find(int u) { if(map[u] != u) map[u] = find(map[u
struct nodef { string name; int score; bool operator <(const nodef &n) const { return this -> score < n.score; } }; 这几句表示建立了一个名为nodef的结构体,其成员变量有name和score,重载了运算符<,表示当一个nodef与nodef做<运算时,第二个nodef作为参数n传入,并且运算的返回值为bool型,比较依据是score变量。
BFS – 广度优先遍历 一种利用队列实现的搜索算法。简单来说,其搜索过程和 “湖面丢进一块石头激起层层涟漪” 类似。形象一点如下: 总的来说,就是先遍历离根节点近的,一层一层的。 程序思路 函数传入需要遍历的树/图的根节点,然后将根节点放入队列,开始循环操作,只要队不是空的,就取队首并且将队首元素所连接的点放入队中。 要注意的是,图中可能出现环,可能会陷入死循环,所以要定义一个数组记录节点是否被访问过。 实现方法 – 存储方式为点对点 广度优先遍历,参数v是开始遍历的点
点对点 建立一个数组,用下标表示不同的点,用其内容表示这个点所连接的点。例如数组名为graph,然后可以用graph[0] = 1表示0点可以通向1点。 其中,如果一个点可以连向多个点,可以使用二维数组存储,例如graph[0][0] = 1和graph[0][1] = 2表示0点所连接的点有1点和2点。通常,这个二维数组的第二维不会被填满,所以,可以使用向量作为第二维,像下面一样: #include <vector> using namespace std; const int M
在这里,可以发布其他的任何有关信息内容,不限于软件和硬件等。