自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 资源 (1)
  • 收藏
  • 关注

原创 线段树模板

线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树,最后的子节点数目为N,即整个线段区间的长度。      使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O

2017-07-30 16:49:14 198

原创 组合数取模

组合数取模就是求的值,当然根据,和的取值范围不同,采取的方法也不一样。下面学习三种求法,参考ACdreamer大神1、当和时,这个问题比较简单,组合数的计算可以靠杨辉三角,那么由于和的范围小,直接两层循环即可。代码:void getc(){ memset(C, 0, sizeof(C)); C[0][0] = 1; for(int i = 1; i < maxn; i++){

2017-07-29 11:01:37 332

转载 中国剩余定理

参考自:http://blog.csdn.net/acdreamers/article/details/8050018中国剩余定理(CRT)的表述如下 设正整数两两互素,则同余方程组                               有整数解。并且在模下的解是唯一的,解为                     

2017-07-28 17:40:05 173

原创 除法取模和逆元

对于正整数和,如果有,那么把这个同余方程中的最小正整数解叫做模的逆元。如果要求a/b%m,下面是三种求逆元的方法:1、如果m为素数,可以根据费马小定理得到逆元为。推理:2、当a和m互质时,可以用拓展欧几里德定理求。

2017-07-27 16:03:42 630

原创 HDU5019Revenge of GCD

Revenge of GCDTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2588    Accepted Submission(s): 736Problem DescriptionIn mathemati

2017-07-25 19:04:20 304

原创 poj2115C Looooops 拓展欧几里德

C LooooopsTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 27800 Accepted: 7915DescriptionA Compiler Mystery: We are given a C-language style for loop

2017-07-22 16:55:50 246

原创 欧几里德与拓展欧几里德定理

一、欧几里德定理欧几里德定理就是辗转相除法的原理,用来求两个整数的最大公约数gcd(a, b)。推理过程:辗转相除法是由辗转相减法而来的,如果a和b(假设a>b)的最大公约数是k,那么可以这样表示a和b:a = x*k, b = y*k;那么a-b = (x-y)*k,此时(a-b)和b的最大公约数也是k,因为:如果它俩的最大公约数是k*t的话,那么b可以整除k*t,(a-

2017-07-21 18:09:30 1895

原创 dijkstra求次短路径

之前用Dijkstra算法求过最短路径,求次短路径在之前的方法上做一下修改就可以。求从s到t的次短路径有两种情况:1、起点s到某个顶点u的最短路+d(u,t)。2、起点到某个顶点u的次短路+d(u,t)。所以更新路径的时候需要把最短路径和次短路径两个都记录下来。具体见代码:#define N 100000+10 #define INF 100000000 typedef p

2017-07-20 12:30:07 4318

原创 指针数组和数组指针

一、指针数组指针数组是个数组,数组中的每个元素都是指针类型。定义:比如 int *p[n];[]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。对于数组a[4][3]:如果直接让p = a这样赋值是不正确的。因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量

2017-07-19 20:54:37 221

原创 HDU4990 Reading comprehension

Reading comprehensionTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1895    Accepted Submission(s): 753Problem DescriptionRead the 

2017-07-19 10:16:36 294

原创 链式前向星

之前存图用邻接表都是直接使用的vector,但是vector是自动扩容的,在空间不够的时候会自动申请多一倍的空间,这样的话空间浪费比较严重,而且有的题目会卡空间,可能就过不了。如果使用链式前向星,就可以节省不少空间,开一个和边的数目相同的数组就可以了。链式前向星包括两个部分:head数组,和edge数组。head[i]表示以i为起点的第一条边的位置。edge是个结构体数组:stru

2017-07-18 09:36:50 302

原创 二分图匹配练习题

关于二分图匹配的讲解见文章二分图匹配。本文练习两个简单的二分图匹配,分别对应于文章中的dfs和bfs的Hungary算法。1、HDU1150 题意:两台机器A和B,每台都有许多工作模式。有多个任务,每个任务可以在A机器的某个模式或者在B机器的某个模式完成。问最少需要重启几次机器。分析:该问题即最小点覆盖,即选取最少的点,使任意一条边至少有一个端点被选择,任务相当于边。最小点覆盖数=

2017-07-17 09:19:08 1025

转载 二分图匹配

这篇文章讲无权二分图(unweighted bipartite graph)的最大匹配(maximum matching)和完美匹配(perfect matching),以及用于求解匹配的匈牙利算法(Hungarian Algorithm);不讲带权二分图的最佳匹配。二分图:简单来说,如果图中点可以被分为两组,并且使得所有边都跨越组的边界,则这就是一个二分图。准确地说:把一个图的顶点划分为

2017-07-16 09:15:01 259

转载 数据库索引

参考文章:http://www.cnblogs.com/AK2012/archive/2013/01/04/2844283.htmlhttp://blog.csdn.net/kennyrose/article/details/7532032/一、索引定义和分类索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。比如说课本的目录就是一个索引,我

2017-07-06 16:33:33 185

原创 HDU4986 Little Pony and Alohomora Part I

本题需要用到欧拉常数和递推。题意:有n个箱子,n把钥匙随机的放在里面,问打开所有箱子的期望。解析:每种情况都相当于一个循环的置换个数。循环置换个数求解:那么考虑f[i]为i个箱子的情况,f[i + 1]要么就是放在最后多一个循环,要么就是插入中间循环个数不变,对应的转移为f[i + 1] = (f[i] + 1) / i + f[i] * (i - 1) / i 化简得到f[i]

2017-07-05 19:47:01 296

原创 HDU4985

题意:给定一个置换群,找出其中能构成循环的子群,分别输出。解析:直接模拟即可。(此题感觉不太严谨,因为题目说是要字典序输出,但按照AC的程序来看每个循环的内部并没有保证是字典序,只是保证了循环之间的字典序。。。只是本人的一点理解)代码:#include #include #define N 100005int a[N];bool vis[N];int main(){ int

2017-07-04 10:39:06 239

原创 次优最小生成树

次优最小生成树是由最小生成树而来的,含义就是所有的生成树集合中,除去最小的那棵,剩下的集合中最小的生成树。(如果所有边的权值都不同,那么次优生成树是一定大于最小生成树的,但是如果存在边的权值相同,则次优生成树可能会等于最小生成树)基本思路是:先求出最小生成树T,然后将不属于最小生成树中的边加入T中,此时会形成一个环,然后将环中最大的一条边(刚加入的边不算)去掉,这样可以保证增加量是最小的。依次

2017-07-02 12:19:15 1317

原创 HDU2682 Tree

TreeTime Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2676    Accepted Submission(s): 830Problem DescriptionThere are N (2<=N<=600

2017-07-01 18:03:47 245

原创 最小生成树——Prim

prim算法是求最小生成树的算法,与求最短路径的dijstra算法类似。是以点为基础进行扩展的。算法的执行过程为:划分两个集合,一个是已放置好的点,另一个数未放置好的点。从任意一个点开始,将这个点放入第一个集合,然后找到与第二个集合中与第一个集合中点距离最近的点,加入第一个集合,重复此操作,一直到所有点都加入为止。时间复杂度:未优化之前的复杂度是O(v^2),使用优先级队列优化后可以达到O(E

2017-07-01 11:18:53 325

原创 最小生成树——kruskal

Kruskal算法是基于贪心的算法,以边为基础进行扩展。首先我们把所有的边按照权值先从小到大排列,接着按照顺序选取每条边,如果这条边的两个端点不属于同一集合,那么就将它们合并,直到所有的点都属于同一个集合为止。合并的过程需要用到并查集(具体见并查集)。Kruskal的时间复杂度分析:Kruskal算法每次要从都要从剩余的边中选取一个最小的边。通常我们要先对边按权值从小到大排序,这一步的时间

2017-07-01 10:13:50 282

python安装包

从官网下载python3安装包,官网下载比较慢,存一下自己用

2017-08-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除