自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(92)
  • 收藏
  • 关注

转载 codevs1246 丑数

题目描述 Description对于一给定的素数集合 S = {p1, p2, ..., pK}, 来考虑那些质因数全部属于S 的数的集合。这个集合包括,p1, p1p2, p1p1, 和 p1p2p3 (还有其它)。这是个对于一个输入的S的丑数集合。注意:我们不认为1 是一个丑数。你的工作是对于输入的集合S去寻找集合中的第N个丑数。longint(signed 32-bit)对...

2016-08-16 20:43:00 683

转载 好久不见!

好长时间没有写博客啦!对我而言这是一个繁忙而意义重大的暑假,先是在一中照着题解刷小水题,沉浸在每天6题的欢乐中,兴致勃勃地看着AC数量水涨船高,(这段时间主要是巩固了以前的基础算法,提高代码能力和debug能力)then去了省里的夏令营的高级数据结构蹭课,勉强听懂模板和神犇们的一眼题……(学了Dinic Splay KMP等等不少新知识,但只是会写模板,而已)最后又...

2016-08-04 21:05:00 141

转载 code4906 删数问题

题目:键盘输入一个高精度的正整数n(<=240位),去掉任意s个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的n和s,寻找一种方案,使得剩下的数最小。Simple Input1785434Simple Output13思路:每一步总是选择一个使剩下的数最小的数字删除,即按高位到低位的顺序搜索,若各位数字递增,则删除...

2016-07-11 19:41:00 152

转载 欧拉函数

来自:http://blog.csdn.net/leolin_/article/details/6642096欧拉函数是指:对于一个正整数n,小于n且和n互质的正整数(包括1)的个数,记作φ(n) 。通式:φ(x)=x*(1-1/p1)*(1-1/p2)*(1-1/p3)*(1-1/p4)…..(1-1/pn),其中p1, p2……pn为x的所有质因数,x是不为0的整数。φ(1)...

2016-07-11 19:01:00 134

转载 高斯消元

来自:http://blog.csdn.net/duanxian0621/article/details/7408887//最近 一直在做一个数论专题,后期有待整理,先将有关资料收藏下,在学习高斯消元的时候看了czyuan大牛的此文获益匪浅,czyuan的此份模板可以解决大 多高斯问题,当然并不是万能的,其中建立矩阵是难点,需要自己琢磨,并且对于方程组是否有解、解的个数以及自由元...

2016-07-11 09:55:00 117

转载 Fibonacci数列

Fibonacci数是组合数学中非常重要的一个数列,它的递推公式是:  F(1)=F(2)=1  F(n)=F(n-1)+F(n-2)  当然,用这个公式来计算F(n)是非常慢的,当计算F(n)时需要从F(1)一直计算到F(n)。Fibonacci数列还满足一些其他的公式,如:  F(a+b+1)=F(a+1)*F(b+1)+F(a)*F(b)  利用这个公式,可以加速Fibonacci...

2016-07-10 15:09:00 154

转载 code1213 解的个数 扩展欧几里得

很不错的题,加深了我对exgcd的理解(以前我认为做题就是搜索、dp...原来数学也很重要)理解了几个小时,终于明白了。但我什么都不打算写。看代码吧:#include<iostream>using namespace std;int exgcd(int a,int b,int& x,int&y){//扩展欧几里得 i...

2016-07-10 14:31:00 189

转载 扩展欧几里得 exgcd

•扩展欧几里德算法是用来在已知a, b求解一组x,y,使它们满足贝祖等式: ax+by =gcd(a, b) = d(解一定存在,根据数论中的相关定理)。扩展欧几里德常用在求解模线性方程及方程组中。•设 a>b。•1,显然当 b=0,gcd(a,b)=a。此时 x=1,y=0;•2,ab<>0 时•设 ax1+by1=gcd(a,b)...

2016-07-10 14:07:00 83

转载 快速幂

•快速幂顾名思义,就是快速算某个数的多少次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。代码:#include<iostream>using namespace std;long long pow(int a,int b){ long long ans=1; while(b>...

2016-07-10 09:38:00 65

转载 code1002 搭桥

最小生成树每读入一个城市,把他与之前的所有城市做一次link()link的内容:1.如果两个城市直接相连,合并他们的集合(并查集)2.如果两个城市可以搭桥,添加一条边来连接。如果不可以搭桥,什么也不做。接着循环所有pa[],如果pa[i]==i,那么这是一个city。这样计算city数量做kruskal,计算桥的数量和桥的总长度代码:#include...

2016-07-10 09:07:00 178

转载 最近公共祖先 LCA 倍增算法

倍增算法可以在线求树上两个点的LCA,时间复杂度为nlogn预处理:通过dfs遍历,记录每个节点到根节点的距离dist[u],深度d[u]init()求出树上每个节点u的2^i祖先p[u][i]求最近公共祖先,根据两个节点的的深度,如不同,向上调整深度大的节点,使得两个节点在同一层上,如果正好是祖先结束,否则,将连个节点同时上移,查询最近公共祖先。void dfs(i...

2016-07-09 12:29:00 96

转载 code1105 过河

dp方程很简单:f[i] = min{ f[i-j] } + stone[i]但是数据10^9太大了,超时超空间,这样只能过30%来自:http://blog.csdn.net/w19960702123/article/details/40478187当我们看到10^9与100块石头,和s,t均小于等于10时,我们会想到有的石头间距可能大于t,即要跳好几步才会到达下...

2016-07-08 17:38:00 158

转载 code3286 火柴排队

这道题目相当于是让我们把a,b对齐,即a中第i大的数与b中第i大的数下标相同一看到交换次数,很容易让人想到归并排序我的做法是这样的就样例而言:a:1 3 4 2b:1 7 2 4读进来之后先处理a,b 把a,b按大小离散成1..n离散之后a:1 3 4 2 b:1 4 2 3那么我们现在的问题就变成了,求a转化为b所用的次数但是仍然很麻烦,所以要进一步离散 - -!我们不难看出,在a数...

2016-07-08 12:13:00 91

转载 逆序对 分治nlogn

定义:A是包含n个元素的有序序列{a1,a2 … an},若ai > aj 且 i < j ,则称 (ai , aj)是A的一个逆序对。求逆序对是指求出A中存在逆序对的数量。这个算法是归并排序的演化,仅需加上一行,就可以求逆序对个数。简单的概括是:在把两个子序列合并时(两个子序列已经有序),如果当前选的最小的数在后面那个序列中,就把ans加上前面那个数组剩下的元素个数...

2016-07-08 12:12:00 134

转载 code1135 选择客栈

首先,预处理三个数组。pre[x]表示在此之前颜色为x的客栈有多少个。f[x]表示在此之前的客栈中,某个点c,c的颜色为x,并且从c点到已经读入的点之间有费用小于p的客栈,这样的c点的个数last[x]表示上一个颜色为x的客栈出现在哪那么接下来的事情就很显然了。首先读进去一个客栈,如果这个客栈满足费用小于等于p,就把它存下来,为temp(也就是说找到一个最近的费用满足...

2016-07-08 09:59:00 481

转载 code3289 花匠

题目大意是求一个最长的抖动的子序列题解中有一个大神写下了这样的代码:#include<cstdio>int n,a=1,b=1,x,y;int mmax(int a,int b){ if(a>b) return a; else return b;}main(){ scanf("%d%d",&...

2016-07-08 09:09:00 72

转载 code1167 树网的核

floyd+枚举看点:1.floyd同时用数组p记录转移节点k,这样知道线段的端点u v就可以得到整条线段2.任意一点c到线段a b的距离=(d[a][c]+d[c][b]-d[a][b])/23.枚举直径st en的所有子线段a b:for(int a=en;a;a=p[st][a])   for(int b=a;b;b=p[st][b])代码:...

2016-07-06 16:57:00 189

转载 线段树

#include<iostream>#include<cstring>#define Size 1000005using namespace std;struct Node{ int l,r,mid; long long sum,tag;}tree[Size];void build(int num,int l...

2016-07-05 08:51:00 63

转载 二分图 and code1170 双栈排序

6.6二分图二分图是这样一个图: 有两顶点集且图中每条边的的两个顶点分别位于两个顶点集中,每个顶点集中没有边直接相连接。无向图G为二分图的充分必要条件是,G至少有两个顶点,且其所有回路的长度均为偶数。判断二分图的常见方法是染色法: 开始对任意一未染色的顶点染色,之后判断其相邻的顶点中,若未染色则将其染上和相邻顶点不同的颜色, 若已经染色且颜色和相邻顶点的颜色相同则说明不是二分...

2016-07-02 21:57:00 133

转载 code1001 舒适的路线

n次最小生成树kruskal将所有的边排序,权值小的在前。设排序后第i条边为路径中的最长边,那么这条路径一定是由1~i中的一些边组成因为最高速和最低速的差尽量小,最高速确定了,最低速应尽量大。所以j从i downto 1,将边j加入边集,如果此时s和t联通了(s t在并查集的一个集合中),那么找到一组可行的解:最大i.w,最小j.w,与最优解比较、更新。如果还没联通,...

2016-06-23 18:27:00 389

转载 code3731 寻找道路

将图反向,从终点spfa,把和终点没有联系的点找出来,把它们和它们所连接的所有点删去(反向图)然后再一遍spfa,输出最短路即可代码:#include<iostream>#include<cstring>#include<queue>#define MAXM 200005#define MAXN 10005...

2016-06-23 18:17:00 88

转载 code1173 最优贸易

先正向从1点出发SPFA,获得min[i],就是到达i点能最低购买到的价格,(起始点到i的路上经过的最小值)然后反向(将图反向),从n点开始SPFA,获得max[i],就是从i点到终点能够卖出的最大的价格,(终止点到i的路上经过的最大值)然后就是寻找差价最大的i,输出答案即可。代码:#include<iostream>#include<cstri...

2016-06-23 16:52:00 459

转载 SPFA

求单源最短路的SPFA算法的全称是:Shortest Path Faster Algorithm,是西南交通大学段凡丁于1994年发表的。定理: 只要最短路径存在,上述SPFA算法必定能求出最小值。数据结构: 队列q, 用数组dis记录每个结点的最短路径估计值. vis存是否在队列里采取的方法是动态逼近法:设立一个先进先出的队列用来保存...

2016-06-23 13:37:00 63

转载 floyd求最小环

Floyd 算法保证了最外层循环到 k 时所有顶点间已求得以 0…k-1 为中间点的最短路径。一个环至少有3个顶点,设某环编号最大的顶点为 L ,在环中直接与之相连的两个顶点编号分别为 M 和 N (M,N < L),则最大编号为 L 的最小环长度即为 Graph(M,L) + Graph(N,L) + Dist(M,N) ,  (Graph是原图)其中 Dist(M,...

2016-06-23 13:13:00 152

转载 传递闭包

所谓传递性,可以这样理解:对于一个节点i,如果j能到i,i能到k,那么j就能到k。求传递闭包,就是把图中所有满足这样传递性的节点都弄出来,计算完成后,我们也就知道任意两个节点之间是否相连。 传递闭包的计算过程一般可以用Warshell算法描述:For每个节点iDoFor每个节点jDoIfj能到iThenFor每个...

2016-06-23 12:57:00 411

转载 code1796 社交网络

输入描述Input Description输入文件中第一行有两个整数,n 和 m,表示社交网络中结点和无向边的数 目。在无向图中,我们将所有结点从 1 到 n 进行编号。 接下来 m 行,每行用三个整数 a, b, c 描述一条连接结点 a 和 b,权值为 c 的 无向边。注意任意两个结点之间最多有一条无向边相连,无向图中也不会出现自 环(即不存在一条无向边的两个端点是相同的结...

2016-06-23 12:14:00 85

转载 tyvj P3737 逐个击破

http://tyvj.cn/p/3737时间: 1000ms / 空间: 131072KiB / Java类名: Main描述秉承伟大军事家的战略思想,作为一个有智慧的军长你,遇到了一个类似的战场局面:现在有N个城市,其中K个被敌方军团占领了,N个城市间有N-1条公路相连,破坏其中某条公路的代价是已知的,现在,告诉你K个敌方军团所在的城市,以及所有公路破坏的代价,请你算...

2016-06-23 09:49:00 97

转载 最小生成树 kruskal

算法思想:先构造一个只含 n 个顶点、而边集为空的子图,把子图中各个顶点看成各棵树上的根结点,之后,从网的边集 E 中选取一条权值最的边,若该条边的两个顶点分属不同的树,则将其加入子图,即把两棵树合成一棵树,反之,若该条边的两个顶点已落在同一棵树上,则不可取,而应该取下一条权值最小的边再试之。依次类推,直到森林中只有一棵树,也即子图中含有 n-1 条边为止。时间复杂度为为O(e^2)...

2016-06-23 09:17:00 53

转载 最小生成树 prim

1.算法思想:图采用邻接矩阵存储,贪心找到目前情况下能连上的权值最小的边的另一端点,加入之,直到所有的顶点加入完毕。2.算法实现步骤:设图G =(V,E),其生成树的顶点集合为U。  (1)把v0放入U。  (2)在所有u∈U,v∈V-U的边(u,v)∈E中找一条最小权值的边,加入生成树。 (3)把②找到的边的v加入U集合。如果U集合已有n个元素,则结束,...

2016-06-23 09:00:00 472

转载 code2039 骑马修栏杆

欧拉通路:find_circuit(结点i){ 当结点i有邻居时    选择任意一个邻居j;    删除边(i,j)或者做访问标记;    find_circuit(结点j); 输出或存储节点i;}本题注意点的编号可能是不连续的,处理n为最大的点的编号,以后循环1到n即可(尽管1到n不是每一个都有实际意义,但n<500)...

2016-06-22 14:40:00 244

转载 code4511 信息传递

寻找最小环#include <cstdio>#include <cstring>#include <iostream>using namespace std;const int MAXN=200000+10;int vis[MAXN],ru[MAXN],vi=0,N,lev[MAXN],fa[MAXN];int ans=...

2016-06-22 13:09:00 62

转载 code3728 联合权值

一开始暴搜,超时3个点...后来看了题解:首先,两个点的距离为2当且仅当它们都与一个点直接相连反过来说,一个点所有的出边的终点都是互相距离2的(最大值可以依靠这个方法,前向星处理的时候将每个点的最大出点和次大出点存起来,最后过一遍比较乘积)那么,所有点对的权值和就是每一个点所产生的点对权值和的总和但此时,如若要对每一个点的出点进行两两配对,每一个点需要O(e^2...

2016-06-22 11:27:00 93

转载 Codevs 4600 [NOI2015]程序自动分析

点的序号很大,存不过来,但点数较少,因此用离散化,然后再用并查集。用map进行离散化,过8个点,2个超时代码:#include<iostream>#include<cstring>#include<algorithm>#include<map> #define Size 1000005*2using na...

2016-06-22 10:05:00 126

转载 code1540 银河英雄传说

pa[i]代表i的fatherpre[i]代表i之前有多少个sum[i]代表i所在的整列有多少个cc为命令类型,x y为命令参数, fx fy分别为x y的father当cc==‘M’时,合并x y,因为是把x所在队列放到y所在队列后面,所以要pre[fx]=sum[fy](剩下的pre在find中计算),sum[fy]+=sum[fx]当cc=='C'时,如果...

2016-06-22 09:59:00 74

转载 code1074 食物链

开3*n的并查集,其中x用来连接与x同类的,x+n用来连接x吃的,x+2*n用来连接x被吃的。1 x y时,如果 x吃y 或 x被y吃,那么为假话,否则x与y同类,x吃的y也吃,x被吃的y也被吃;2 x y时,如果 x与y同类(x与x自然也是同类) 或 y吃x,那么为假话,否则x吃y,y被x吃,y吃x被吃的。代码:#include<iostream&gt...

2016-06-21 20:30:00 656

转载 堆排序

5.3.3.堆排序堆:设有数据元素的集合(R1,R2,R3,...Rn)它们是一棵顺序二叉树的结点且有 Ri<=R2i 和Ri<=R2i+1(或>=)堆的性质:堆的根结点上的元素是堆中的最小元素,且堆的每一条路径上的元素都是有序的。堆排序的思想是:1)heapdown调整堆:每次调整都是从父节点、左孩子节点、右孩子节点三者中选择最大者跟父...

2016-06-21 15:49:00 71

转载 哈夫曼树与哈夫曼码

概念:树的路径长度:一棵树的每一个叶结点到根结点的路径长度的和。带权二叉树:给树的叶结点赋上某个实数值(称叶结点的权)。带权路径长度:各叶结点的路径长度与其权值的积的总和。哈夫曼树(最优二叉树):带权路径长度最小的二叉树。如何构建哈夫树:(思想是:权越大离跟越近)哈夫曼码:哈夫曼树的非叶结点到左右孩子的路径分别用0,1 表示,从根到叶的路径序列即为哈夫曼码。哈...

2016-06-21 15:19:00 124

转载 优先队列用法

在优先队列中,优先级高的元素先出队列。标准库默认使用元素类型的<操作符来确定它们之间的优先级关系。优先队列的第一种用法,也是最常用的用法:priority_queue<int>qi;通过<操作符可知在整数中元素大的优先级高。故示例1中输出结果为:9 6 5 3 2第二种方法:在示例1中,如果我们要把元素从小到大输出怎么办呢?这时我们可以传入一个比较函...

2016-06-21 15:00:00 61

转载 code1154 能量项链

d[l][i]表示:从第i个珠子开始,连续l个珠子合并后释放的最大能量状态转移方程d[l][i] = d[j][i] + d[l-j][i+j] + w[i]*w[i+j]*w[i+l],j从1到l-1注意实际操作时i+j和i+l要mod n.代码:#include<iostream>#include<cstring>using ...

2016-06-21 13:58:00 76

转载 code1225 八数码Bfs

Bfs搜索1.把棋盘直接作为状态:#include<iostream>#include<cstring>#include<queue>#include<cstdlib>using namespace std;const int n=9;const int Size=4;int flag;...

2016-06-21 11:05:00 162

空空如也

空空如也

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

TA关注的人

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