
菜鸟系列
文章平均质量分 78
kopyh
这个作者很懒,什么都没留下…
展开
-
菜鸟系列——划分树
做回菜鸟,老老实实重新学起:划分树数据结构;求k大值及左右和模版:#define N 123456int sorted[N]={0}; //对原集合中元素排序后的值int val[20][N]={0}; //val记录第k层当前位置的值int num[20][N]={0}; //记录元素所在区间当前位置前的元素进入到左子树的个数int lnum, rnum;原创 2015-06-18 00:36:07 · 360 阅读 · 0 评论 -
菜鸟系列——双连通分量
菜鸟就要老老实实重新学起:双连通分量就是求图中能够彼此之间有不少于2条路线到达的点集,也就是点集中不存在割点(若无重边)。求无向图的双联通分量与有向图的强联通分量相同,用Tarjan算法,只是因为是无向图所以注意加边是双向加但是深搜时不能搜回父节点。模版:#define N 110vectorg[N];stackst;// 深度优先搜索访问次序, 能追溯到的最早原创 2015-09-09 19:48:00 · 1053 阅读 · 0 评论 -
菜鸟系列——强连通分量
菜鸟就要老老实实重新学起:强连通分量有向图所有点之间存在路线则称为强联通图,非强联通图中的强联通子图成为强连通分量。Tarjan算法就是通过深搜,记录节点的次序及节点之后能搜索到的最小次序,当最小次序是其本身时,就是一个强连通分量的根。参考:https://www.byvoid.com/blog/scc-tarjan/模版:#define N 110vectorg原创 2015-07-25 14:58:18 · 378 阅读 · 0 评论 -
菜鸟系列——二分图匹配
菜鸟就要老老实实重新学起:二分图匹配——匈牙利算法(dfs实现)dfs深搜找增广路经求二分图最大匹配。//二分图匹配:二分图最大配对数//最小点覆盖:选取最少的点覆盖所有边//最大独立集:选取最多的点,集合中点之间无连接//二分图最大匹配==最小点覆盖==总点数-最大独立集模版:#define N 1234int n,m,cnt;int f[N];int v原创 2015-07-25 17:04:42 · 688 阅读 · 0 评论 -
菜鸟系列——八数码八境界
菜鸟就要老老实实重新学起:八数码:很经典的搜索问题,写这个练练搜索。八数码问题就是给出一个3*3的矩阵其中有1~8数字和一个空格‘x’,可以移动周围的数字到这个空格上,要求某种排列恢复到{{1,2,3},{4,5,6},{7,8,x}}形式的移动方法。由大神的八数码八境界想自己实现一下 http://www.cnblogs.com/goodness/archive/20原创 2015-09-14 18:05:46 · 6555 阅读 · 1 评论 -
菜鸟系列——欧几里德与扩展欧几里
菜鸟就要老老实实重新学起:欧几里德算法:就是辗转相除法,小学的东西,gcd(a,b)=gcd(b,a%b),实现简单,用途广泛,,模版:long long gcd(long long x,long long y){ return y?gcd(y,x%y):x; }或者用迭代的写法:long long gcd(long long x,long long y原创 2015-08-19 15:26:27 · 901 阅读 · 0 评论 -
菜鸟系列——欧拉函数
菜鸟就要老老实实重新学起:欧拉函数在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。欧拉定理a与p互质,a^x==1(mod p)则x==euler[p];模版://直接求解欧拉函数long long euler(long long n){ long long res=n,a=n; for(long long i原创 2015-09-28 23:28:14 · 657 阅读 · 0 评论 -
菜鸟系列——简单搜索
菜鸟就要老老实实重新学起:简单搜索:一些简单搜索题,源自kuangbin大神的题目列表,留下以后出题用。eg:POJ1321 棋盘问题http://poj.org/problem?id=1321题意:在一个棋盘内放k个棋子,每一行每一列都最多只能有一个棋子,求方法数,‘#’为可放的地方。思路:直接暴力深搜枚举所有情况即可,每一行选择一个点向下继续深搜,同原创 2015-09-22 01:34:01 · 1430 阅读 · 0 评论 -
菜鸟系列——最近公共祖先(LCA)
菜鸟就要老老实实重新学起:最近公共祖先(LCA)求树上亮点的最近公共祖先,就是求包含这两个点的最小的子树的根节点。Tarjan(离线算法):就是预先储存所有询问,然后深搜便利所有点,后序遍历找到每个询问中的点,对于每个询都是在两个点都找到的那一刻得到最近公共祖先,后序遍历中不断把点加入并查集中,已加入的最上面的点就是当前的根节点。模版:const int M原创 2016-01-12 14:28:12 · 511 阅读 · 0 评论 -
菜鸟系列——康托展开
菜鸟就要老老实实重新学起:康托展开/逆康托展开:主要就是用来求全排列的次序,可用于取某序列的hash值。///康托展开{int fac[] = {1,1,2,6,24,120,720,5040,40320}; //i的阶乘为fac[i]/* 康托展开.{1...n}的全排列由小到大有序,s[]为第几个数 */int KT(int n, int s[]){原创 2015-09-11 20:14:08 · 840 阅读 · 0 评论 -
菜鸟系列——KMP
菜鸟就要老老实实重新学起:KMP字符串kmp算法,就是前缀匹配,计算要查找的字符串的next[ ]值,就是该字符串每个位置字符匹配错误时的跳转位置,从而使字符串匹配复杂度由O(M*N)降到O(M);下面模版将基础的计算next值的方法加了一层回滚,当该处与回滚处字符相同,则该处的next值继续向前回滚到字符不同为止;模版:void getnext(char *pre,原创 2015-07-19 15:42:15 · 412 阅读 · 0 评论 -
菜鸟系列——容斥原理
菜鸟就要老老实实重新学起:容斥原理:容斥原理就是求有重复覆盖区间的总和大小,eg: //大小为n1,n2,n3的三个集合,有多少种组合//二集合中第i个不能与a[i]个一集合的项组合,不能与b[i]个三集合的项组合int a[N],b[N];long long solve(int n2,int n2,int n3){ long long sum=n1*n2*原创 2015-09-07 14:45:06 · 540 阅读 · 0 评论 -
菜鸟系列——约瑟夫环
菜鸟就要老老实实重新学起:约瑟夫环:就是长度为n的环每数m个就删去,最后留下一个。一般问题有两种,求某种m情况下最后留下的序号核心就是循环倒推:for(i=2;i<=n;i++) res=(res+m)%i;或者求一种m使得某一段序列最后被留下。核心就是枚举m正向循环,同时取模求当前删去数的序号:res=0;k=1;for(i=0;i<n;i+原创 2015-08-20 13:54:44 · 456 阅读 · 0 评论 -
菜鸟系列——字典树
做回菜鸟,老老实实重新学起:字典树动态模版://动态链表实现#define MAXN 26struct node{ node *next[MAXN]; int v; //根据需要变化};node *root;//字典树建立void createTrie(char *str){ int len = strl原创 2015-06-27 21:37:17 · 359 阅读 · 0 评论 -
菜鸟系列——Sparse Table
做回菜鸟,老老实实重新学起:Sparse Table构造RMQ数组:ST(int n) O(nlog(n))的算法复杂度dp[i][j] 表示从i到i+2^j -1中最小的一个值(从i开始持续2^j个数)dp[i][j]=min{dp[i][j-1],dp[i+2^(j-1)][j-1]}查询RMQ: RMQ(int i,int j)将i-j 分成两个2原创 2015-06-11 00:37:55 · 535 阅读 · 0 评论 -
菜鸟系列——置换群
菜鸟就要老老实实重新学起:置换群简单地说置换群就是按一定规则互相替换的一个集合。简单,主要看例题。poj3270给出一列数,求将这列数排成升序的最小花费,这里花费定义为交换两个数的和。例如给出一排数8 4 5 3 2 7,那么我们最终的状态为2 3 4 5 7 8,这里的轮换有(8 2 7)(4 5 3),这里8应该在第六个位置,而第6个位置是7,7应该原创 2015-08-10 20:01:49 · 1641 阅读 · 0 评论 -
菜鸟系列——回文串
菜鸟就要老老实实重新学起:回文串(Manacher算法)Manacher算法: http://blog.youkuaiyun.com/xingyeyongheng/article/details/9310555HDU3068 最长回文http://acm.hdu.edu.cn/showproblem.php?pid=3068题意:求字符串中最长回文子串;原创 2015-07-19 20:47:16 · 412 阅读 · 0 评论 -
菜鸟系列——polya计数法
菜鸟就要老老实实重新学起:Burnside引理,polya计数法:Burnside引理: 1/|G|*(C(π1)+C(π2)+C(π3)+.....+C(πn));C(π):指不同置换下的等价类数。例如π=(123)(3)(45)(6)(7),X={1,2,3,4,5,6,7};那么C(π)={3,6,7}共3个等价类。Polya定理: 1/|G|*(mC(π1)+m原创 2015-08-12 10:27:08 · 2102 阅读 · 0 评论 -
菜鸟系列——最短路
菜鸟就要老老实实重新学起:单源最短路 Dijkstra:类似prim,找到最近的点更新距离dist [ ] ,邻接矩阵存图。模版:#define INF 0x3f3f3f3f#define N 1010int g[N][N],dist[N];bool vis[N];int dijkstra(int n,int u,int v){ int minn,i,j原创 2015-07-22 13:52:15 · 362 阅读 · 0 评论 -
菜鸟系列——最小生成树
菜鸟就要老老实实重新学起:Prim遍历所有点,找到最近的点加入树中,更新距离数组dist [ ] 。邻接矩阵存图。模版:#define N 1010bool vis[N];int g[N][N],dist[N];int prim(int n){ int minn,i,j,pos=1,res=0; memset(vis,false,sizeof(v原创 2015-07-22 12:15:22 · 426 阅读 · 0 评论 -
菜鸟系列——搜索
菜鸟就要老老实实重新学起:DFS、BFS:优先深度搜索、优先广度搜索,思想很简单,看怎么用了。eg:POJ3037 Skiinghttp://poj.org/problem?id=3037题意:一个矩阵各点有不同高度,从 A点到周围4个B点的速度是 V = Va*(2^(Ha-Hb))。给出初速度,矩阵高,矩阵宽。高度矩阵。求左上到右下所用最短时间。原创 2015-07-22 20:23:41 · 441 阅读 · 0 评论 -
菜鸟系列——素数筛选-Miller-Rabin素数测试等
菜鸟就要老老实实重新学起:简单素数判断:就是暴力判素数,O(sqrt(n))模版:bool prime(int a){ if(a==0||a==1)return false; if(a==2)return true; if(a%2==0)return false; for(int i=3;i<=sqrt(a);i+=2)原创 2015-08-17 17:01:30 · 444 阅读 · 0 评论 -
菜鸟系列——pollard_rho分解质因子
菜鸟就要老老实实重新学起:pollard_rho分解质因子:利用miller-rabin和pollard_rho算法进行大素数判断和素因子分解。模版:long long factor[1000];//质因数分解结果(刚返回时是无序的)int sum;//质因数的个数。数组小标从0开始#define T 100//随机算法判定次数,N越大,判错概率越小long lo原创 2015-08-18 15:43:53 · 436 阅读 · 0 评论 -
菜鸟系列——线段树
做回菜鸟,老老实实重新学起:线段树基本数据结构;求和模版:#define N 51234#define root 1 , n , 1#define lson l , m , rt << 1#define rson m + 1 , r , rt << 1 | 1long long sum[N<<2],add1[N<<2],add2[N<<2];//原创 2015-06-11 10:55:20 · 593 阅读 · 0 评论