算法
文章平均质量分 77
WarrenChou_
当你的才华支撑不起你的野心时,只有静下心来好好学习!
展开
-
强连通分量、割点、割边
一、强连通分量分解1.什么是强连通分量对于一个有向图顶点的子集SSS,如果在SSS内任取两个顶点uuu和vvv,都能找到一条从uuu到vvv的路径,那么就称SSS是强连通的。如果在强连通的顶点集合SSS中加入其它任意顶点集合后,它都不再是强连通的,那么就称SSS是原图的一个强连通分量(SCC:StronglyConnectedComponentSCC:Strongly Connected Co...原创 2019-12-03 22:07:39 · 443 阅读 · 0 评论 -
网络流——最大流
一、什么是网络流网络流是指给定一个有向图,其中有两个特殊的点:源点sss(Source)和汇点ttt(Sink);每条边都有一个指定的流量上限,下文均称之为容量(Capacity),即经过这条边的流量不能超过容量,这样的图被称为网络流图。同时,除了源点和汇点外,所有点的入流和出流都相等,源点只有流出的流,汇点只有流入的流,网络流就是从 sss 到 ttt 的一个可行流。二、可行流、最大流定义...原创 2019-11-27 16:10:23 · 4659 阅读 · 1 评论 -
拓扑排序
1.什么是拓扑排序在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。且该序列必须满足下面两个条件:1.每个顶点出现且只出现一次。2.若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说。例...原创 2019-11-19 22:53:10 · 415 阅读 · 0 评论 -
背包九讲
一.01背包题目描述有NNN件物品和一个容量为VVV的背包。第i件物品的费用是w[i]w[i]w[i],价值是v[i]v[i]v[i],求将哪些物品装入背包可使价值总和最大。基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][j]f[i][j]f[i][j]表示前iii件物品恰放入一个容量为jjj的背包可以获得的最大价值。则其状态转移方...原创 2019-10-30 20:25:56 · 387 阅读 · 0 评论 -
常见数论问题集合
1. 求最大公约数欧几里得算法(辗转相除法)int gcd(int a,int b){ return b?gcd(b,a%b):a;}扩展欧几里得算法int extgcd(int a,int b,int &x,int &y){ int d=a; if(b){ d=extgcd(b,a%b,y,x); y-=(a/b)*x; ...原创 2019-10-13 16:51:50 · 1493 阅读 · 0 评论 -
树状数组
1.什么是树状数组树状数组(Binary Indexed Tree,BIT)是能够完成下述操作的数据结构。给一个初始值全为0的数列a1,a2,···,an 给定i,计算a1+a2+···+ai 给定i和x,执行ai+=x2.BIT的结构如图,其中A为普通数组,C为树状数组(C在物理空间上和A一样都是连续存储的)。从图中可以得出:C1 = A1C2 = C1 + A2 = A...原创 2019-09-27 15:46:11 · 585 阅读 · 0 评论 -
并查集
来自《挑战程序设计竞赛》原创 2019-09-08 10:29:21 · 735 阅读 · 0 评论 -
线段树详解
1.什么是线段树线段树是一颗完全二叉树,树上的每个节点都维护一个区间。根维护的是整个区间,每个节点维护的是父亲的区间二等分后的其中一个子区间。当有n个元素时,对区间的操作可以在O(logn)的时间内完成。根据节点中维护的数据不同的不同,线段树可以提供不同的功能,如RMQ、RSQ等。对于数组[2, 5, 1, 4, 9, 3]可以构造如下的二叉树(背景为白色表示叶子节点,非叶子节点的值是其对应...原创 2019-09-25 22:41:58 · 659 阅读 · 0 评论 -
二分答案/查找
1.什么是二分答案二分答案就是通过对所有可能的答案区间进行折半查找,不断缩减范围,最终确定答案的方法。2.二分条件有上下界区间有单调性我们假设整个序列具有单调性,且一个数x为可行解,那么一般的,所有的 x’(x’<x) 都是可行解。并且,如果有一个数y是非法解,那么一般的,所有的 y’(y’>y) 都是非法解。考虑所有可行解,我们肯定是要从这些可行解中找到一个最好的作为...原创 2019-09-22 17:18:26 · 472 阅读 · 0 评论 -
欧拉回路/路径
1.什么是欧拉回路/路径欧拉路径:在一个图中,由i点出发,将每个边遍历一次最终到达j点的一条路径。欧拉回路:i=j时的欧拉路径。2.怎么判断欧拉回路/路径存在欧拉回路/路径前提 图是连通的无向图中在无向图中(连通图),只要每个点的度数(连接的边数)均为偶数,就会存在欧拉回路因为每个点的度数为偶数,所以可以将整个图看做由数个环嵌套而成,因为环一定能找到一条欧拉回路...原创 2019-09-18 14:17:57 · 979 阅读 · 0 评论 -
最短路问题+最小生成树
最短路问题1.Dijkstra(迪杰斯特拉)算法图的存储链式前向星法int N,M,dix; //图的最大顶点数和边数int h[N]; //顶点数组struct node{int e,v,next;}edge[M];//添加边void add(int a,int b,int c) //边起点、终点、权值{edge[++dix].e=b;edge[dix].v=...原创 2019-09-11 18:32:19 · 585 阅读 · 0 评论 -
高精度算法
高精度:就是在很大的位数情况下进行运算。(炸int甚至long long)其基本思想就是用数组进行模拟加法。模拟近位。 最后遍历数组输出。附上高精加,减,乘代码。除法以后写了补上。1. 高精度加法原题点这里#include <bits/stdc++.h>using namespace std;string a,b,str;string add(string s1,st...原创 2019-09-05 21:19:29 · 454 阅读 · 1 评论 -
深度优先搜索dfs(附模板+例题讲解)
讲深搜的话,拿经典的迷宫问题来说明是最好的,刚好最近在洛谷上刷到了一道迷宫题,就以它为例了,原题在下面P1605 迷宫题目要求输入输出格式输入输出样例输入样例:2 2 11 1 2 21 2输出样例:1【数据规模】1≤N,M≤5题目整体来说比较简单,思路就是使用深搜一个一个查,用两个数组分别标记走过的点和障碍物,使用自动选择方向来简化代码,没有遇到障碍物并且不是...原创 2019-07-16 17:59:57 · 5466 阅读 · 4 评论 -
C++中int类型与char,string类型的互换
这是本蒟蒻刚刚做完一道题在看题解时发出的呼喊声。。。引出今天的主题前先给大家看道题吧题目描述输入输出格式输入输出格式输入样例:313 312 343输出样例34331213看完题是不是感觉很简单,就是字符串的排序问题,因为string类自定义了大小排序,我们可以写一个CMP函数作为sort的第三个参数,但我们要注意的是我们比较的应该是a+b而不是a和b,为什么呢?因...原创 2019-07-18 11:32:54 · 499 阅读 · 0 评论 -
int向下取整/向上取整
原题点这里这道题主要考察的是排序,有个方便的方法就是定义一个结构体,存储每个志愿者的报名号和笔试分数,然后定义一个排序就OK了值得注意的是,题目里有一个要求是取给定人数×150%(向下取整)的分数作为面试分数线,这里顺便提一下c++里面的两个取整函数:地板函数(floor)和天花板函数(ceil)。举个栗子floor(10.5) == 10 floor(-10.5) == -11c...原创 2019-07-11 11:43:30 · 20535 阅读 · 0 评论 -
贪心算法的简单应用
今天在洛谷刷到了一道简单的贪心算法题,在这里给大家分享一下,顺便提一下在做这道题的时候发现的一个巨坑(费尽心思才找出来的呜呜呜)这是原题P1056 排桌椅仔细审题之后,发现这是一道贪心算法的简单应用,可以用两个数组分别存放每一行和每一列上交头接耳的人的对数,然后再分别开辟一个数组存放人数最多的前K和L个行和列,再进行一趟排序就可以AC了上代码#include <bits/stdc+...原创 2019-07-10 14:52:58 · 253 阅读 · 0 评论 -
欧拉筛法
寻找素数:欧拉筛法时间复杂度O(n) (目前发现复杂度最小级别的)const int maxn=100000001;int prime[maxn]; //就是个素数表bool sf[maxn]; //判断这个数是不是素数,sf[i]中的i是从1到maxn的数void sushu(){ //核心 欧拉筛代码 int num=0; ...原创 2019-07-05 09:00:52 · 1826 阅读 · 0 评论 -
KMP字符串匹配
next数组(递推法)void GetNext(char* p,int next[]){ int pLen = strlen(p); next[0] = -1; int k = -1; int j = 0; while (j < pLen - 1) { //p[k]表示前缀,p[j]表示后缀 if (k == -1 || p[j] == p[k]) { +...原创 2019-07-10 10:35:45 · 135 阅读 · 0 评论 -
分数取模(快速取模法+小费马定理)
这周打了牛客竞赛周赛,结果在第一道题就卡死了(呜呜呜)这是原题牛客练习赛49拿到题后,本蒟蒻想着不就是一道排序题吗,就直接写了一个快速排序输出,结果直接WA了。百思不得其解,这时后台发来了一个广播消息:提示:如果不能整除,输出分数取模后的结果。what???分数取模,虽然刚刚学过密码学的时候接触过,但不知道算法怎么写啊,果断地去百度了一下,找到了小费马定理:a^p-1 mod p = 1 ...原创 2019-07-09 13:14:35 · 18262 阅读 · 2 评论